WPF中的战舰使用MVVM结构
Battleship in WPF using MVVM strucutre
我对 WPF 和 MVVM 完全陌生,这就是我决定开始研究它的原因。我正在开发战舰游戏。如果我在我的视图中创建 Canvas,并在 ViewModel 中创建另一个 canvas 并绑定它们 - 一切正常。但是有一个问题。首先,我将矩形和文本块添加到我的 Canvas 中以表示网格。我的 "Field" Class (Model) 是在 ViewModel 中用来做逻辑的。我想在 class IsLegendHidden (bool) 中包含 属性。如果我将其设置为 true,则会调用该方法。在该方法中,linq 查找与我的图例相关的文本块,然后将它们的可见性设置为隐藏。它工作正常,但是在模型 class 中具有逻辑在 MVVM 结构中是错误的。但是将算法移到 ViewModel 端将消除使用 class 属性 "IsLegendHidden" 的能力。但我想在模型 class 中包含 属性。我该如何解决?
您的模型 Class 可以自由实施 INotifyPropertyChanged 并且它可以在特定 属性 更改时通知 ViewModel。这允许您拥有一个更简单的模型并在 ViewModel 中完成逻辑。
您还可以对属性进行单独建模,这些属性更侧重于 ViewModel 可以参考的视图问题。
在使用 MVVM 时,我喜欢尝试尽可能地分离事物。模型对象应该只代表他们正在建模的概念。 ViewModel 绑定到特定视图,因此它将模型的属性解释或转换为对视图重要的内容。您可以在模型上拥有不是 'IsLegendHidden' 的东西,但它为 ViewModel 的 'IsLegendHidden' 属性.
提供动力
我对 WPF 和 MVVM 完全陌生,这就是我决定开始研究它的原因。我正在开发战舰游戏。如果我在我的视图中创建 Canvas,并在 ViewModel 中创建另一个 canvas 并绑定它们 - 一切正常。但是有一个问题。首先,我将矩形和文本块添加到我的 Canvas 中以表示网格。我的 "Field" Class (Model) 是在 ViewModel 中用来做逻辑的。我想在 class IsLegendHidden (bool) 中包含 属性。如果我将其设置为 true,则会调用该方法。在该方法中,linq 查找与我的图例相关的文本块,然后将它们的可见性设置为隐藏。它工作正常,但是在模型 class 中具有逻辑在 MVVM 结构中是错误的。但是将算法移到 ViewModel 端将消除使用 class 属性 "IsLegendHidden" 的能力。但我想在模型 class 中包含 属性。我该如何解决?
您的模型 Class 可以自由实施 INotifyPropertyChanged 并且它可以在特定 属性 更改时通知 ViewModel。这允许您拥有一个更简单的模型并在 ViewModel 中完成逻辑。
您还可以对属性进行单独建模,这些属性更侧重于 ViewModel 可以参考的视图问题。
在使用 MVVM 时,我喜欢尝试尽可能地分离事物。模型对象应该只代表他们正在建模的概念。 ViewModel 绑定到特定视图,因此它将模型的属性解释或转换为对视图重要的内容。您可以在模型上拥有不是 'IsLegendHidden' 的东西,但它为 ViewModel 的 'IsLegendHidden' 属性.
提供动力