我是WPF和MVVM的新手,这就是我决定开始研究的原因。我正在开发战舰游戏。如果我在我的视图中创建Canvas,并在ViewModel中创建另一个画布并绑定它们 - 一切正常。但是有一个问题。首先,我将Rectangles和TextBlocks添加到我的Canvas中以表示网格。我的“Field”类(Model)在ViewModel中用于完成逻辑。我想在该类IsLegendHidden(bool)中拥有该属性。如果我将其设置为true,则调用该方法。在该方法中,linq查找与我的图例相关的文本块,然后将其可见性设置为隐藏。它运行正常,但是在MVVM结构中,Model类中的逻辑是错误的。但是将算法移动到ViewModel端将消除使用类属性“IsLegendHidden”的能力。但是我希望在模型类中包含该属性。我该如何解决?
答案 0 :(得分:1)
您的Model类可以自由实现INotifyPropertyChanged,它可以在特定属性更改时通知ViewModel。这允许您拥有更简单的模型并在ViewModel中完成逻辑。
您还可以对属性进行单独建模,这些属性更侧重于ViewModel可以参考的视图问题。
使用MVVM时,我喜欢尝试尽可能地分开。模型对象应该只代表他们正在建模的概念。 ViewModel与特定视图相关联,因此它会将模型的属性解释或转换为对视图重要的属性。你可以在模型上有一些不是'IsLegendHidden'的东西,但它可以支持ViewModel的'IsLegendHidden'属性。