【问题标题】:C# WPF MVVM 2 Usercontrols 具有相同数据上下文和 ViewModel 的视图
【发布时间】:2022-01-23 15:54:33
【问题描述】:

我有 2 个用户控件视图,它们是:

Bmw.xaml 和 Audi.xaml

在两个 xamls 中我都添加了这个:

<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类中知道它是属于audi还是bmw usercontrol?因为根据这一点,必须执行不同的逻辑。

提前谢谢你!

【问题讨论】:

  • 当您想要 BMW 和 Audi 的单独逻辑时,为什么要使用相同的 ViewModel 两次?
  • 因为我还想对两个视图使用大致相同的逻辑,但也想使用一些单独的逻辑。
  • 使用两者共享共同逻辑和道具的接口......或创建一个基类。您还可以向您的构造函数添加一个参数,以获取车辆制造并确定您需要做什么。
  • 你是如何切换这些用户控件的?
  • 我想在同一个窗口中显示两个用户控件。例如 BrandModel AudiModel = new BrandModel() 和 BrandModel BmwModel = new BrandModel()。我想在 Audi 用户控件中显示 AudiModel.On,在 Bmw 用户控件中显示 BmwModel.On。因为它们使用相同的模型,但值不必相同。 (模型中的数据来自 PLC。因此必须将 BMW 的数据加载到 BmwModel 实例中。)但是使用两个不同的 ViewModel 可能会更好?

标签: c# wpf mvvm


【解决方案1】:

首先,创建一个枚举来定义您拥有的品牌。像这样

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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2017-12-22
    • 2018-07-18
    • 2023-03-11
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多