Silverlight MVVM:MainView w / SubViews或MainViewModel w / SubViewModel

时间:2011-04-13 14:50:00

标签: silverlight architecture mvvm mvvm-light

我有一个带有选项卡式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”?

感谢您分享您的想法!

2 个答案:

答案 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