我搜索了这个网站,我找到了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视图模型.....
我完全不知道如何进一步解决这个问题....如果我正确地显示用户控制权,或者我应该做其他事情......完全混淆......
答案 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),为什么不能使用它?