使用MVVM Light Toolkit动态加载UserControl

时间:2011-06-07 06:31:29

标签: wpf data-binding mvvm-light dynamic-usercontrols

我搜索了这个网站,我找到了2个链接
how to load wpf usercontrol in MVVM pattern

MVVM-Light: Load UserControl into Window

但我仍无法找到问题及此链接的答案

MVVM-Light Locator Pattern and Reusable UserControl

我没有理解......所以我在这里说明我的问题可能会帮助别人像我一样挣扎......

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

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

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

如何使用MVVM使此复合UI工作。另外,我打算使用MVVM light Toolkit。这有什么可以帮助......

一个例子很棒

谢谢...:)

编辑

我在UserControl中的TreeView我在UserControl中创建了一个依赖属性,它捕获树视图中的选定项,以便我可以使用此依赖属性来填充“MainView中的所需视图“ContentControl约束......正如你在评论中告诉我的那样。一切都到现在为止

问题是我想显示所选项目中包含的数据,我无法将UserControls的DataContext(将在右侧显示)设置为所选项目,因为我将无法使用我的查看命令和其他操作的相应usercontrol的模型

我也尝试解决这个问题....我在TreeViewUserControl视图模型中使用Mediator(Messenger)向Usercontrol(我需要显示的那个)视图模型发送一条消息。只要在树视图中选择了项目,就会传递消息。和消息包含所选节点。我忘了提到我将UserControl的datacontext设置为其视图模型,以便我可以显示数据

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

我完全不知道如何进一步解决这个问题....如果我正确地显示用户控制权,或者我应该做其他事情......完全混淆......

1 个答案:

答案 0 :(得分:1)

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

编辑OP的编辑
你做了这个了吗?

  • MainWindow的TreeView的ItemsSource=Binding MainVM.Items
  • MainWindow的ContentControl为Content=Binding TreeView.SelectedItem
  • 项目中的某处,ResourceDictionary MainVM.Items中每个可能的类型都定义了DataTemplate吗?

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