关于MVVM模式和GUI中XAML动态加载的困惑

时间:2009-05-24 06:54:34

标签: wpf mvvm

这个问题与MVVM模式有关,我可以在这个论坛上找到好的和快速的答案,所以我想要问清楚我对模式的困惑。

我对MVVM方法很陌生。我很欣赏这种模式并理解其背后的原理。也许我没有那么多的模式,这就是为什么有一些混乱。

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

困惑是:

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

2 个答案:

答案 0 :(得分:1)

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

至于是否为页面有一个VM,或者每个控件有一个VM,这取决于。一般来说,我有一个页面。如果有一些部分可以在其他地方重复使用,我会将其分解为具有自己的VM的用户控件,这意味着我们在VM中有一个VM。我不同意这个上的rockeye。 V-VM-M之间没有一对一的关系。您的模型是根据业务需求而设计的,完全不考虑演示。您的ViewModel是根据您的演示需求设计的,可以封装多个模型。事实上,他们很常见地封装了很多模型。

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

答案 1 :(得分:0)

我对mvvm也很新,但我会尽力回答:

  
      
  1. 使用XAML动态加载视图的逻辑
  2.   

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

  

2我的WPF页面是否应该有一个ViewModel,或者每个单独的部分都有自己的viewmodel与其他viewmodel类的交互

看来你有一个自上而下的方法。我认为mvvm更像是自下而上:模型(业务对象) - > ViewModels - >视图。每个模型都应该有自己的ViewModel和视图。所以你不能在viewModel中拥有一个完整的WPF页面,除非你的模型代表一个页面。

  

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

不明白。我想你可以看看dataTemplate,它可能会有所帮助。