1

我搜索了这个站点,发现了 2 个链接
如何在 MVVM 模式中加载 wpf 用户控件

MVVM-Light:将 UserControl 加载到窗口中

但我仍然找不到我的问题的答案和这个链接

MVVM-Light Locator Pattern 和可重用的用户控件

我不明白......所以我在这里陈述我的问题,这可能会帮助像我一样挣扎的其他人......

我有一个MainWindow有 2 个部分,一个有TreeView(a UserControl),另一个显示不同的用户控件(名为 DisplayPanel)......就像 Windows 资源管理器一样。

右侧的显示面板将在树形视图的单击节点上显示不同的用户控件。

而我TreeView本身就是一个用户控件。

我怎样才能使这个复合 UI 使用MVVM. 我也打算使用MVVM轻型工具包。这有什么可以帮助...

一个例子会很棒

谢谢... :)

编辑

我在 TreeView 中创建UserControl了一个依赖属性,UserControl它捕获树视图的选定项,以便我可以使用此依赖属性在“MainView”ContentControl绑定中填充所需的视图....正如您在评论中建议我的那样. 一切都到现在

问题是我想显示所选项目中包含的数据,并且我无法将 UserControls 的 DataContext(将显示在右侧)设置为所选项目,因为这样我将无法使用我的视图模型命令和其他操作的相应用户控件

我也试图解决这个问题....我在 TreeViewUserControl 视图模型中使用了调解器(信使)向用户控件(我需要显示的那个)视图模型发送消息。每当在树视图中选择项目时都会传递消息。并且消息包含选定的节点。我忘了提到我将 UserControl 的数据上下文设置为其视图模型,以便我可以显示数据

但是使用这种方法的问题是,当我第一次单击一种类型的节点时,数据不会被填充,但是如果再次单击相同类型的节点,它会被填充。发生的情况是,UserControl当第一次单击树项并且 Mediator 发送消息时,s 对象可用。所以 Mediator 无法将消息传递给 userControl 视图模型.....

我完全没有想法进一步解决这个问题......如果显示用户控制权是我的方式,或者我应该做其他事情......完全困惑......

4

1 回答 1

1

您可以尝试为 TreeView 的ItemsSource中的每种类型定义一个DataTemplate ,而不是在右侧有一个特定的 UserControl ,只需绑定到 TreeView 的SelectedItem。或者,您可以使用DataTemplateSelector

为 OP 的编辑编辑
你这样做了吗?

  • MainWindow有 TreeView 其ItemsSource=Binding MainVM.Items.
  • MainWindow有 ContentControl,其Content=Binding TreeView.SelectedItem.
  • 在项目中的某个地方,ResourceDictionary每个可能的类型在哪里MainVM.Items定义了一个 DataTemplate?

您尝试使用哪个 ViewModel(MainVM 或 ItemVM),为什么不能使用它?

于 2011-06-07T20:12:29.977 回答