使用新用户控制窗口MVVM WPF更新详细信息窗格



我将尽力详细解释这个问题。

我使用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和删除你的崩溃,因为没有必要隐藏它了:)

如果你需要进一步的解释,可以问我。

最新更新