2010-10-30 28 views
3

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

有三种选择,

选择1

CustomerMasterView + CustomerMasterViewModel 
CustomerDetailView + CustomerDetailViewModel 

并保持两视图模型在App.Resources

但是通过这样做,结合变得复杂了所有静态资源来源标记代码。

选择2

CustomerViewModel 
CustomerMasterView 
CustomerDetailView 

这两种观点都通过App.Resources共享同一个视图模型,以及即使绑定代码有太多的项目。

选择3

CustomerMasterView + CustomerMasterViewModel 
CustomerDetailView + CustomerDetailViewModel 

两个视图的已设置的DataContext到其对应的视图模型。现在这里是小问题, CustomerMasterView具有Selector(ListBox或DataGrid或其他),其SelectedItem需要绑定到CustomerDetailViewModel的“Customer”属性作为双向绑定。

它看起来不错吗?

<!-- CustomerMasterView --> 

<ListBox 
    ItemsSource="{Binding CustomerList}" 
    SelectedItem="{Binding DataContext.Customer,ElementName=customerDetailView}" 
    /> 

<local:CustomerDetailView 
    x:Name="customerDetailView" 
    /> 

但是,这样做,因为它在我的UI代码将更加依赖我不畏视图模型的目的。

哪一个是最喜欢的方式还是有其他方法? 我应该创建嵌套视图模型吗?

我也在尝试学习棱镜,而且我对如何做到这一点没有什么困惑,任何帮助都将被评价。

回答

2

在我看来,最简单的方法就是拥有一个单一的视图模型,并带有两个UserControls。

您的ViewModel将拥有您的客户列表以及“ActiveCustomer”或“SelectedCustomer”。您马西德威(与DataContext的设置为您视图模型),将包含您的列表,有线像这样:

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

你马西德威还将包括您的DetailsView(另一个用户控件)。它看起来像这样:

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

+0

相反,我使用ActiveItem的嵌套视图模型,因为详细视图模型已经有很多东西了。 – 2010-11-03 13:03:18

0

您可能会感兴趣的WPF Application Framework (WAF)BookLibrary示例应用程序。它演示了如何使用两个视图(单独的UserControls)和两个ViewModel实现主/细节方案。

相关问题