问题理解和实现MVVM
本文关键字:实现 MVVM 问题 | 更新日期: 2023-09-27 17:56:23
作为一个新手和自学成才,我需要帮助来尝试理解实现MVVM模型的方法。我已经阅读了初学者指南,当我阅读它们时,所有这些指南基本上都是有意义的,但我似乎无法实现飞跃并将其实施到我的项目中。
我知道核心概念是通过使用视图模型将数据/模型与UI/视图分开,但我似乎无法达到让我自己做的理解点。
简而言之,我的项目在当前状态下有一个名为 Game
的类,该类有许多字典来存储其他命名的类; Bonus
,Item
和Unit
。通常只有一个game
实例被传递,该实例被序列化为文件以保存数据,然后反序列化回去。Unit
的实例将有string Name
,以及Dictionary<string,Item> AvailableItems
和Dictionary<string,Bonus> GrantedBonus
来表示它拥有的物品和奖励(如果有的话)。Item
的实例具有string Name
、string Type
和Dictionary<string,Bonus> GrantedBonus
字段,以表示此项目(如果有)授予的加成。Bonus
的实例具有string Name
、string Effect
和Dictionary<string,Bonus> SubBonus
字段,以表示此加成是否也提供另一个加成。
对于Bonus
类,我已经实现了 PropertyChanged 通知,并为这些字段添加了相关属性。我还没有为其他人这样做
所有类都填充了用户提供的数据。当他们开始时,必须先设置一些Bonus
,然后才能设置任何Item
,这些必须在设置任何Unit
之前进行设置,这些Game
必须在程序中进一步使用之前进行设置。由于每个特定的类都是由用户设置的,因此它们将被添加到Game
中各自的字典中。
我的理解是,这些课程是我的模型的。我对我希望视图的外观有一个粗略的想法,但我还没有设置它,因为它可能会污染视图模型设计。我真正遇到麻烦的地方是试图了解如何设计相关的 ViewModels,即使是最简单的类Bonus
。
在最详细的级别,通常在设置时,用户需要查看Name
和Effect
数据,以及SubBonus
列表(如果已填充)。但是,在大多数情况下,用户只需要以列表形式查看存储在Game
类中的Bonus
项的整体列表的Name
。
我能否获得有关如何构造 ViewModel 类的一些指导?我是否需要为奖金创建一个,即BonusViewModel
,或者只是游戏,因为它最终保存了所有数据?提前谢谢。
实际上取决于你如何设计代码。我更喜欢为我的模型使用 POCO,并将所有 INPC 和其他逻辑放在我的视图模型中。例如
型
public class Bonus
{
public string Name { get; set;}
}
视图模型
public class BonusViewModel : ViewModelBase
{
// ViewModelBase is an abstract class that implements INPC
public BonusViewModel(Bonus model)
{
Model = model;
}
public Model Bonus { get; private set; }
public string Name
{
get { return Model.Name; }
set { Model.Name = value; OnPropertyChanged("Name");}
}
public string FunnyName
{
get { return string.Format("{0} is so funny", Name); }
}
}
视图
...
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=FunnyName}" />
...