代码之家  ›  专栏  ›  技术社区  ›  Akash Kava

如何在MVVM中创建带有两个用户控件的主详细视图?

  •  3
  • Akash Kava  · 技术社区  · 15 年前

    对于如何使用两个不同的用户控件创建主详细视图,我有点困惑。

    有三种选择,

    选择1

    CustomerMasterView + CustomerMasterViewModel
    CustomerDetailView + CustomerDetailViewModel
    

    并将两个视图模型都保存在App.Resources中

    但是通过这样做,所有静态资源源标记代码的绑定都变得很复杂。

    CustomerViewModel
    CustomerMasterView
    CustomerDetailView
    

    两个视图通过App.Resources共享同一个ViewModel,即使绑定代码有太多项。

    选择3

    客户主视图+客户主视图模型
    客户详细视图+客户详细视图模型
    

    两个视图都将DataContext设置为其相应的ViewModel。现在有个小问题, CustomerMasterView具有选择器(ListBox或DataGrid或其他),其SelectedItem需要作为双向绑定绑定绑定到CustomerDetailViewModel的“Customer”属性。

    看起来不错吗?

    <!-- CustomerMasterView -->
    
    <ListBox
        ItemsSource="{Binding CustomerList}"
        SelectedItem="{Binding DataContext.Customer,ElementName=customerDetailView}"
        />
    
    <local:CustomerDetailView
        x:Name="customerDetailView"
        />
    

    但这样做,我违背了ViewModel的目的,因为它在我的UI代码中添加了更多的依赖项。

    我应该创建嵌套视图模型吗?

    我也在努力学习棱镜,我对如何做正确的事情没有什么困惑,任何帮助都会被告知。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Adam Barney    15 年前

    在我看来,最简单的方法是使用一个视图模型,带有两个用户控件。

    您的ViewModel将有您的客户列表,以及一个“ActiveCustomer”或“SelectedCustomer”。您的主视图(DataContext设置为ViewModel)将包含您的列表,如下所示:

    <ListBox ItemsSource="{Binding Customers}" SelectedItem="{Binding ActiveItem, Mode=TwoWay}" />

    您的主视图还将包括您的DetailsView(另一个用户控件)。看起来是这样的:

    <views:DetailsUserControl DataContext="{Binding ActiveItem}" />

        2
  •  0
  •   jbe    15 年前

    图书馆 样品应用 WPF Application Framework (WAF)