作为一个新手和自学者,我需要帮助尝试理解MVVM模型的实现方法。我已经阅读了初学者指南,所有这些都在我阅读时很有意义,但我似乎无法实现这一目标并将其实施到我的项目中。
我知道核心概念是通过使用viewmodel将数据/模型与UI / View分开,但我似乎无法达到让我自己去做的理解点。
简而言之,我当前状态的项目有一个名为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
{{}}之前设置1}}可以设置,必须在Game
可以在程序中进一步使用之前设置。由于每个特定类都是由用户设置的,因此它们将被添加到Bonus
中的相应字典中
我的理解是这些课程是我的模型。我粗略地了解了我希望视图看起来像什么,但我还没有设置它,因为它可能会污染视图模型设计。在我真正遇到麻烦的地方,正试图了解如何设计相关的ViewModel,即使对于最简单的类Name
也是如此。
在最详细的级别,通常在设置时,用户需要查看Effect
和SubBonus
数据以及Name
的列表,如果它是人口稠密的。但是,在大多数情况下,用户只需要以列表形式查看Bonus
Game
个项目的BonusViewModel
个{{1}}类。
我可以获得一些关于如何构建ViewModel类的指导吗?我是否需要为奖金创建一个,即{{1}},或者仅仅是游戏,因为它最终会保存所有数据?提前谢谢。
答案 0 :(得分:1)
真的取决于您设计代码的方式。我更喜欢将POCO用于我的模型,并将所有INPC和其他逻辑放在我的viewmodel中。 e.g。
模型
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}" />
...