我有一个带有选项卡式UI的MainView。
如何向TabControl添加新的TabItem(= View)? Basicaly我看到两种方式:
1。)
*从MainView中的代码我可以添加一个新选项卡
*新标签包含一个视图,其中包含对其视图模型的引用。
2。)
*来自MainViewModel中的代码我可以将新的viewmodel添加到childViewModel的列表中
* mainView的tabcontrol绑定到该列表
我以某种方式优先考虑案例#1,因为我认为视图应该知道并实现它的VM(可能是通过使用MVVM光ViewModelLocator)而不是反过来。
但是,如何将新创建的VM引用到MainVM?例如:MainVM有一个属性'IsAdmin';如何从SubViewModel访问(绑定)该属性?
备选方案#2:TabControl如何知道哪个视图应该为不同的ViewModel“渲染”?如何从SubViewModel“映射”到相应的“SubViews”?
感谢您分享您的想法!
答案 0 :(得分:0)
我会check out this SO post,因为答案可以用来帮助解决您的问题。
根据MVVM的精神,您将希望遵循备选方案#2。让ViewModel逻辑帮助您确定需要显示哪些“选项卡”,并使用DataTemplates来表示这些对象。然后你将它们绑定到View的DataContext,你在DataTemplate(View)中的绑定将正常工作。
答案 1 :(得分:0)
托马斯,
MVVM真的是MVVMC。我建议为MainView配备一个控制器,其中包含一个创建新选项卡的方法。如果TabControl很复杂,您可以将功能放在TabControl本身中。当驱动功能位于模型中时,关注点的分离(MODEL与VIEWMODEL与VIEW与CONTROLLER的关系)会受到影响。 (M或VM)。
此致
Guido