【问题标题】:Update the Details Pane with the New User Control Window MVVM WPF使用新的用户控制窗口 MVVM WPF 更新详细信息窗格
【发布时间】:2014-07-11 16:01:48
【问题描述】:

我将尽力详细解释问题。

我正在使用 WPF、MVVM 和 PRISM。这是应用程序的结构:


CONTAINER

User control containing a toolbar

----------          LEFT PANE USER CONTROL              
right pane
user control
----------

---------------------------------------------------------------

容器是一个外壳,它承载应用程序的外观。 Shell 还包含许多不同的用户控件,如用户用户控件、角色用户控件、类别用户控件。所有控件都折叠起来。

工具栏有保存、编辑、删除等选项。当用户从工具栏中选择 Edit 选项时,我使用 WPF 命令调用 ViewModel 上的 Edit 方法,如下所示:

 private void Edit(UserViewModel userViewModel)
        {
            // load the edit page            

        }

toolbar.Datacontext 被动态设置为用户控件的数据上下文,它是一个视图模型。因此,相同的工具栏可以用于不同的上下文来调用不同视图模型上的命令。

此时我已经在 Edit 方法中获得了正确的 UserviewModel。这一切都很好!但现在!我需要更新详细信息窗格以反映 EditView。我怎样才能做到这一点?所有控件都嵌入在折叠的 Shell.xaml 文件中。此外,ViewModel 位于单独的程序集中,Shell 位于单独的程序集中。

这是我需要帮助的地方!因为(Shell 引用 ViewModel 程序集而不是相反)不知道 Shell 的 viewModel 怎么能将 EditView 注入 Shell 详细信息窗格。

【问题讨论】:

  • 你如何将你的观点注入细节面板?通过数据模板,通过区域管理器,还是直接设置为详细信息面板的内容?如果您可以为容器发布基本的 xaml,将不胜感激。

标签: c# wpf


【解决方案1】:

您可以使用CommandParameter 属性绑定到您要传入的内容。

<Button Content="Edit" Command="{Binding Path=EditCommand}" CommandParameter="{Binding SelectedItem, ElementName=datagrid}" />

datagrid 是您提到的 Datagrid。

【讨论】:

    【解决方案2】:

    进入你的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,我们将其绑定为内容,现在它应该可以正常工作了

    也不要忘记 RaisPropertyChanged 并删除您的折叠,因为不再需要隐藏它:)

    如果您需要进一步的解释,请询问我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 2019-01-18
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多