问题理解&实现MVVM

时间:2014-04-03 01:14:18

标签: c# wpf mvvm

作为一个新手和自学者,我需要帮助尝试理解MVVM模型的实现方法。我已经阅读了初学者指南,所有这些都在我阅读时很有意义,但我似乎无法实现这一目标并将其实施到我的项目中。
我知道核心概念是通过使用viewmodel将数据/模型与UI / View分开,但我似乎无法达到让我自己去做的理解点。

简而言之,我当前状态的项目有一个名为Game的类,它有许多字典来存储其他被命名的类; BonusItemUnit。通常只传递一个game实例,它被序列化为一个文件以保存数据,然后反序列化。
Unit的实例将string Name以及Dictionary<string,Item> AvailableItemsDictionary<string,Bonus> GrantedBonus代表其拥有的项目和奖金(如果有)。
Item的实例包含string Namestring TypeDictionary<string,Bonus> GrantedBonus的字段,用于表示此项目授予的奖金(如果有)。
Bonus的实例包含string Namestring EffectDictionary<string,Bonus> SubBonus的字段,用于表示此奖金是否还会授予其他奖励。
对于Bonus类,我实现了PropertyChanged通知,并添加了这些字段的相关属性。我还没有为其他人做过这个

所有类都填充了用户提供的数据。当他们开始时,必须先设置一些Bonus,然后才能设置任何Item,这些Unit必须在任何Game {{}}之前设置1}}可以设置,必须在Game可以在程序中进一步使用之前设置。由于每个特定类都是由用户设置的,因此它们将被添加到Bonus中的相应字典中 我的理解是这些课程是我的模型。我粗略地了解了我希望视图看起来像什么,但我还没有设置它,因为它可能会污染视图模型设计。在我真正遇到麻烦的地方,正试图了解如何设计相关的ViewModel,即使对于最简单的类Name也是如此。 在最详细的级别,通常在设置时,用户需要查看EffectSubBonus数据以及Name的列表,如果它是人口稠密的。但是,在大多数情况下,用户只需要以列表形式查看Bonus Game个项目的BonusViewModel个{{1}}类。

我可以获得一些关于如何构建ViewModel类的指导吗?我是否需要为奖金创建一个,即{{1}},或者仅仅是游戏,因为它最终会保存所有数据?提前谢谢。

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}" />

...