我将尽力详细解释这个问题。
我使用WPF, MVVM和PRISM。下面是应用程序的结构:
CONTAINER
User control containing a toolbar
---------- LEFT PANE USER CONTROL
right pane
user control
----------
---------------------------------------------------------------
容器是一个Shell,它承载着应用程序的外观。Shell还包含许多不同的用户控件,如user用户控件、Role用户控件、Categories用户控件。所有的控件都是折叠的。
工具栏有保存、编辑、删除等选项。当用户从工具栏中选择Edit选项时,我使用WPF命令调用ViewModel上的Edit方法,如下所示:
private void Edit(UserViewModel userViewModel)
{
// load the edit page
}
工具栏。数据上下文被动态地设置为用户控件的数据上下文,它是一个视图模型。因此,相同的工具栏可以与不同的上下文一起使用,以调用不同视图模型上的命令。
此时,我已经在Edit方法中获得了正确的UserviewModel。这一切都很好!但是现在!我需要更新详细信息窗格以反映EditView。我该怎么做呢?所有控件都嵌入到Shell中。Xaml文件崩溃。此外,ViewModels在一个单独的程序集中,Shell在一个单独的程序集中。
这就是我需要帮助的地方!不知道Shell (Shell引用viewModel程序集,而不是其他方式)的viewModel如何将EditView注入Shell详细信息窗格。您可以将CommandParameter
属性绑定到您想要传递的内容。
<Button Content="Edit" Command="{Binding Path=EditCommand}" CommandParameter="{Binding SelectedItem, ElementName=datagrid}" />
其中datagrid
是您提到的Datagrid
进入CONTAINER
xaml并写入
<CONTAINER.Resources>
<DataTemplate DataType="{x:Type vm:UserViewModelVM}">
<!--if your View is a separat Usercontrol-->
<vw:UsertV />
<!--else insert your UsertV xaml-->
</DataTemplate>
</CONTAINER.Resources>
这个xaml告诉你的应用程序,如果一个UserViewModelVM
是直接显示的,它必须包装在你的DataTemplate
现在转到LEFT PANE USER CONTROL
<LEFT PANE USER CONTROL Content={Binding yourVMProperty}
DataContextContent={Binding yourVMProperty}/>
显示UserViewModelVM
,我们将其绑定为Content,现在它应该可以正常工作了
也不要忘记RaisPropertyChanged和删除你的崩溃,因为没有必要隐藏它了:)
如果你需要进一步的解释,可以问我。