我目前在主窗口上有一个Ribboncontrol
。在Ribboncontrol上有几个RibbonPages,根据选择的RibbonPage,我想在RibbonControl下面显示一个不同的IDE布局,以满足所选RibbonPage的需要。
我的方法是否正确,我为每个IDE布局创建了不同的视图/视图模型,并且对于所选择的每个不同的RibbonPage,是否会使用相应的视图/视图模型?我喜欢使用这种方法,因为我不需要在views / viewmodels之间进行通信,因为每个RibbonPage中的功能都是自包含的。
每个视图都是UserControl
,封装了DockLayoutManager
。我在下面添加了一些截图(SS1 = MainWindow,我要在其上加载不同的视图; SS2 =代表UserControl的视图,后者代表一个DockLayoutManager,包含所有相关的LayoutPanels,DocumentPanels,....)
问题:我将如何实现这一点,并且这是一个可行的解决方案,可以根据所选的RibbonPage显示不同的视图?
答案 0 :(得分:1)
通常显示与RibbonControl
的不同功能和/或标签相关的不同视图页面。通常,您有一个基本视图模型类,您的所有视图模型都会扩展,并且在父视图模型中具有该类型的属性...让我们称之为YourViewModelProperty
。要更改视图,您只需要为该属性设置新的视图模型:
YourViewModelProperty = new SomeDerivedViewModel()
您可以在UserControl
中声明的DataTemplate
中将每个App.xaml
与其相关的视图模型相关联。通过这种方式,它们将全部可用于应用程序中的每个视图。您可以在我对Stack Overflow上的WPF - automatic view resolving for view model问题的回答中找到有关此方法的更多信息。
更新>>>
我对WPF MVVM navigate views问题的回答中提供了更好的解释。