Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 如何在MVVM中使用两个用户控件创建主详细视图?_Silverlight_Data Binding_Mvvm_Prism - Fatal编程技术网

Silverlight 如何在MVVM中使用两个用户控件创建主详细视图?

Silverlight 如何在MVVM中使用两个用户控件创建主详细视图?,silverlight,data-binding,mvvm,prism,Silverlight,Data Binding,Mvvm,Prism,对于如何使用两个不同的用户控件创建主细节视图,我有点困惑 有三种选择, 选择1 CustomerMasterView + CustomerMasterViewModel CustomerDetailView + CustomerDetailViewModel 并将两个视图模型都保存在App.Resources中 但通过这样做,绑定对于所有静态资源源标记代码变得复杂 选择2 CustomerViewModel CustomerMasterView CustomerDetailView 两个视图

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

有三种选择,

选择1

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的嵌套视图模型,因为细节视图模型已经有很多东西了。