问题理解和实现MVVM

本文关键字:实现 MVVM 问题 | 更新日期: 2023-09-27 17:56:23

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

简而言之,我的项目在当前状态下有一个名为 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必须在程序中进一步使用之前进行设置。由于每个特定的类都是由用户设置的,因此它们将被添加到Game中各自的字典中。
我的理解是,这些课程是我的模型的。我对我希望视图的外观有一个粗略的想法,但我还没有设置它,因为它可能会污染视图模型设计。我真正遇到麻烦的地方是试图了解如何设计相关的 ViewModels,即使是最简单的类Bonus
在最详细的级别,通常在设置时,用户需要查看NameEffect数据,以及SubBonus列表(如果已填充)。但是,在大多数情况下,用户只需要以列表形式查看存储在Game类中的Bonus项的整体列表的Name

我能否获得有关如何构造 ViewModel 类的一些指导?我是否需要为奖金创建一个,即BonusViewModel,或者只是游戏,因为它最终保存了所有数据?提前谢谢。

问题理解和实现MVVM

实际上取决于你如何设计代码。我更喜欢为我的模型使用 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}" />
...