【发布时间】:2018-07-13 02:19:57
【问题描述】:
我对 WPF MVVM 比较陌生。我目前正在做一个小项目,以了解有关 WPF MVVM 概念的详细信息,并且面临一个我无法理解的小问题。
我有一个带有<ContentControl Content="{Binding Path=CurrentViewModel}" /> 的主窗口,并且在主窗口 ViewModel 类上设置了 CurrentViewModel 属性。主窗口具有三个按钮控件,用于列出、编辑和删除实体。 ContentControl 加载一个 UserControl (ListEntities),它列出了来自某个数据存储的所有实体。 UserControl xaml 有自己的 ViewModel 类,该类被设置为 ContentControl 内容属性,并且使用 DataTemplates 加载视图。
这一切都很好。我的要求是,当用户在 ListEntities UserControl GridView 中选择一行时,必须启用编辑和删除按钮(使用 ICommand 基础结构的 CanExecute 方法)。问题是我可以基于 SelectedItem 属性绑定在 UserControl ViewModel 类上设置 SelectedEntity 属性,但是如何使所选项目可用于主窗口视图模型类以启用编辑/删除按钮(如何从父视图中我会知道子视图中的一个项目是使用 MVVM 模式选择的)。因此,以更通用的方式,我试图了解 基于父视图或子视图中的某些事件启用父窗口的独立 ViewModel 和子用户控件之间的通信的最标准过程。
【问题讨论】:
-
您将通过依赖注入 (DI) 将您的 ID 或实体发送到您的 ViewModel。换句话说,您需要一个可以接收参数(id 或实体)的构造函数。
-
在这里您可以创建一个非常简洁的minimal reproducible example 并将其发布在您的问题中。就目前而言,这是一团糟。我只能收集到你在做 MVVM 完全错误,但我真的不能说。
标签: wpf mvvm wpf-controls