2009-05-24 54 views
4

这个问题涉及到MVVM模式,我可以在这个论坛上很好和快速的回​​答,所以我想问清楚我对模式的混淆。关于MVVM模式和GUI中动态加载XAML的困惑

我对MVVM方法很新颖。我欣赏这种模式并理解背后的原则。也许我对这种模式没有太多的工作,这就是为什么有一些混乱。

如果有一种情况,我想用XAML动态加载WPF页面的几个部分,并且仍然希望符合MVVM方法。

的混乱是:

  1. 凡与XAML动态加载的视图的逻辑驻留。
  2. 无论我的WPF页面是否应该有一个ViewModel,或者每个独立的部分都有自己的视图模型以及与其他视图模型类的交互。
  3. 如果我必须在代码隐藏本身中使用C#代码构建在GUI上显示的控件树,该怎么办? 对于使用代码创建的控件,我应该在视图本身的代码隐藏中执行命令绑定。

回答

1

加载的逻辑是模式本身没有真正解决的问题。 Ward Bell对此有一个有趣的blog post。有许多方法可以对这个猫进行皮肤处理,并且它们都与MVVM兼容。不是真的你要找的答案,我知道,但它是诚实的:)。查看Ward的博客文章...您将会对此主题进行更深入的讨论。

至于是否只有一个虚拟机用于该页面,或者每个控件只有一个虚拟机。一般来说,我有一个页面。如果某些部分可以在其他地方重复使用,那么我会将其分解为具有自己VM的用户控件,这意味着我们在VM中有一个VM。我不同意rockeye这个。 V-VM-M之间不存在一对一的关系。您是模特根据业务需求设计,根本不考虑演示。您的ViewModel根据您的演示需求进行设计,并可封装多个模型。事实上,他们封装很多模型是非常普遍的。

像rockeye,我不明白你的最后一个问题。

+0

伟大的答案+1的链接 – 2009-07-18 23:09:06

0

我也是很新的MVVM,但我会尽量回答:

  1. 在以利用XAML动态加载一个视图的逻辑驻留

如果您意思是“我如何显示与业务对象相关的视图?”,恕我直言,你不必关心这一点。通常,您的虚拟机具有相应的视图。使用dataTemplate,您只能在代码中使用虚拟机,但视图会自动显示。

2我是否应该有一个单一的视图模型为我的WPF页面或每个单独的部分有自己的视图模型与交互与其他视图模型类

看来你有一个上下的方式。我将mvvm看作自下而上:模型(业务对象) - > ViewModels - > Views。每个模型都应该有自己的ViewModel和视图。因此,除非您的模型代表页面,否则您无法在viewModel中拥有完整的WPF页面。

3如果我必须在代码隐藏本身中使用C#代码构建在GUI上显示的控件树,该怎么办?对于使用代码创建的控件,我应该在视图本身的代码隐藏中执行命令绑定。

不明白。我想你可以看看dataTemplate,它可能是有用的。