C# WPF MVVM 2 用户控制具有相同数据上下文和 ViewModel 的视图
C# WPF MVVM 2 Usercontrols views with the same data context and ViewModel
我有 2 个用户控件视图,它们是:Bmw.xaml
和 Audi.xaml
。
在两个 xaml 中我添加了这个:
<UserControl x:Class=TestProject.Views.Fragments.Audi
<!--The standard code generated by visual studio-->
xmlns:viewModels="clr-namespace:TestProject.ViewModels"
<Grid>
<!--XAML CODE-->
</Grid>
</UserControl>
在 bmw.caml.cs 和 audi.xaml.cs 中,我的构造函数中都有:
public Audi()
{
InitializeComponent();
this.DataContext = new BrandViewModel();
}
和
public BMW()
{
InitializeComponent();
this.DataContext = new BrandViewModel();
}
在 ViewModel 中是我的函数,为了简单起见,当 ViewModel 被奥迪调用时,我想调用函数 ActionAudi(),当它被宝马调用时,我想调用 ActionBMW()。
在viewModel中有什么好的方法可以知道class它是属于audi还是bmw usercontrol?因为依赖于此必须执行不同的逻辑。
提前致谢!
首先,创建一个枚举来定义您拥有的品牌。像这样
public enum Brands
{
Audi,
BMV,
Vinfast
}
其次,将您的 ViewModel 的构造函数修改为这样的想法。
public BrandViewModel(Brands brand)
{
// passing brand to a field or property
}
最后,通过您刚刚创建的新构造函数设置您的 DataContext。
public Audi()
{
InitializeComponent();
this.DataContext = new BrandViewModel(Brands.Audi);
}
和
public BMW()
{
InitializeComponent();
this.DataContext = new BrandViewModel(Brands.BMW);
}
我有 2 个用户控件视图,它们是:Bmw.xaml
和 Audi.xaml
。
在两个 xaml 中我添加了这个:
<UserControl x:Class=TestProject.Views.Fragments.Audi
<!--The standard code generated by visual studio-->
xmlns:viewModels="clr-namespace:TestProject.ViewModels"
<Grid>
<!--XAML CODE-->
</Grid>
</UserControl>
在 bmw.caml.cs 和 audi.xaml.cs 中,我的构造函数中都有:
public Audi()
{
InitializeComponent();
this.DataContext = new BrandViewModel();
}
和
public BMW()
{
InitializeComponent();
this.DataContext = new BrandViewModel();
}
在 ViewModel 中是我的函数,为了简单起见,当 ViewModel 被奥迪调用时,我想调用函数 ActionAudi(),当它被宝马调用时,我想调用 ActionBMW()。
在viewModel中有什么好的方法可以知道class它是属于audi还是bmw usercontrol?因为依赖于此必须执行不同的逻辑。
提前致谢!
首先,创建一个枚举来定义您拥有的品牌。像这样
public enum Brands
{
Audi,
BMV,
Vinfast
}
其次,将您的 ViewModel 的构造函数修改为这样的想法。
public BrandViewModel(Brands brand)
{
// passing brand to a field or property
}
最后,通过您刚刚创建的新构造函数设置您的 DataContext。
public Audi()
{
InitializeComponent();
this.DataContext = new BrandViewModel(Brands.Audi);
}
和
public BMW()
{
InitializeComponent();
this.DataContext = new BrandViewModel(Brands.BMW);
}