这个问题与MVVM模式有关,我可以在这个论坛上找到好的和快速的答案,所以我想要问清楚我对模式的困惑。
我对MVVM方法很陌生。我很欣赏这种模式并理解其背后的原理。也许我没有那么多的模式,这就是为什么有一些混乱。
如果有一种情况我想用XAML动态加载我的WPF页面的几个部分,并且仍然希望符合MVVM方法。
困惑是:
答案 0 :(得分:1)
加载的逻辑是模式本身没有真正解决的问题。沃尔贝尔对此有一个有趣的blog post。有很多方法可以为这只猫提供皮肤,它们都与MVVM兼容。我知道,这不是你要找的答案,但这是诚实的:)。查看Ward的博客文章......您将对此主题进行更深入的讨论。
至于是否为页面有一个VM,或者每个控件有一个VM,这取决于。一般来说,我有一个页面。如果有一些部分可以在其他地方重复使用,我会将其分解为具有自己的VM的用户控件,这意味着我们在VM中有一个VM。我不同意这个上的rockeye。 V-VM-M之间没有一对一的关系。您的模型是根据业务需求而设计的,完全不考虑演示。您的ViewModel是根据您的演示需求设计的,可以封装多个模型。事实上,他们很常见地封装了很多模型。
像rockeye一样,我不明白你的最后一个问题。
答案 1 :(得分:0)
我对mvvm也很新,但我会尽力回答:
- 使用XAML动态加载视图的逻辑
醇>
如果您的意思是“我怎样才能显示与我的业务对象相关联的视图?”,恕我直言,您不必关心这一点。通常,您的VM具有相应的视图。使用dataTemplate,您只在代码中使用VM,但会自动显示视图。
2我的WPF页面是否应该有一个ViewModel,或者每个单独的部分都有自己的viewmodel与其他viewmodel类的交互
看来你有一个自上而下的方法。我认为mvvm更像是自下而上:模型(业务对象) - > ViewModels - >视图。每个模型都应该有自己的ViewModel和视图。所以你不能在viewModel中拥有一个完整的WPF页面,除非你的模型代表一个页面。
3如果我必须使用代码隐藏本身中的C#代码构建GUI上显示的控制树,该怎么办?对于使用代码创建的控件,我应该在视图本身的代码隐藏中执行命令绑定。
不明白。我想你可以看看dataTemplate,它可能会有所帮助。