Silverlight 如何在MVVM中使用两个用户控件创建主详细视图?
对于如何使用两个不同的用户控件创建主细节视图,我有点困惑 有三种选择, 选择1Silverlight 如何在MVVM中使用两个用户控件创建主详细视图?,silverlight,data-binding,mvvm,prism,Silverlight,Data Binding,Mvvm,Prism,对于如何使用两个不同的用户控件创建主细节视图,我有点困惑 有三种选择, 选择1 CustomerMasterView + CustomerMasterViewModel CustomerDetailView + CustomerDetailViewModel 并将两个视图模型都保存在App.Resources中 但通过这样做,绑定对于所有静态资源源标记代码变得复杂 选择2 CustomerViewModel CustomerMasterView CustomerDetailView 两个视图
CustomerMasterView + CustomerMasterViewModel
CustomerDetailView + CustomerDetailViewModel
并将两个视图模型都保存在App.Resources中
但通过这样做,绑定对于所有静态资源源标记代码变得复杂
选择2
CustomerViewModel
CustomerMasterView
CustomerDetailView
两个视图通过App.Resources共享相同的ViewModel,即使绑定代码也有太多的项
选择3
CustomerMasterView + CustomerMasterViewModel
CustomerDetailView + CustomerDetailViewModel
两个视图都将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代码中添加了更多依赖项
哪一种是最受欢迎的方式,或者还有其他方式吗?
我应该创建嵌套视图模型吗
我也在尝试学习Prism,我对如何正确操作有点困惑,任何帮助都会很感激。我认为最简单的方法是使用一个单视图模型和两个用户控件 您的ViewModel将包含您的客户列表,以及“ActiveCustomer”或“SelectedCustomer”。您的主视图(DataContext设置为您的ViewModel)将包含您的列表,如下所示:
主视图还将包括DetailsView(另一个用户控件)。看起来是这样的:
您可能对的图书库示例应用程序感兴趣。它展示了如何使用两个视图(单独的用户控件)和两个视图模型来实现主/细节场景。相反,我使用ActiveItem的嵌套视图模型,因为细节视图模型已经有很多东西了。