如何在 MVVM 模式中正确实现模型和视图模型

本文关键字:模型 实现 视图 MVVM 模式 | 更新日期: 2023-09-27 17:58:04

我已经开始学习MVVM模式并面临一些问题。我正在构建一个应用程序,该应用程序存储某个国家/地区的省市列表。现在我需要知道如何准确地实现模型。

我应该说数据库中的表及其字段如下:

表: 省份:身份证、姓名

表: 城市ID, 省 ID, 名称

现在我想知道哪种方法更适合模型?模型的属性是否应与表中的字段完全相同?例如:

class Province {
public uint ID {get; set;}
public string Name {get; set;}
};
class City {
    public uint ID {get; set;}
    public uint ProvinceID {get; set;}
    public string Name {get; set;}
}

或者类城市最好引用其省份,例如:

class City {
    public uint ID {get; set;}
    public Province Province {get; set;}
    public string Name {get; set;}
}

或者有什么更好的主意吗?

视图模型

呢?我应该在省视图模型中有一个城市视图模型列表吗?

提前谢谢。如果我没有清楚地解释我的问题,请告诉我。

如何在 MVVM 模式中正确实现模型和视图模型

如果

您可以将实际Province作为类的成员,为什么要对特定Province使用 ID?

假设您需要省的名称,因此您需要先找到并构建Province才能获得实际名称。话虽如此,完全没有必要。

基本上,在MVVM模式中,你有一个Model,一个ViewModel和一个ViewViewViewModel交互,反之亦然。此外,ViewModel使用Model进行更改。

您可以将两个类都用作Model,同时为每个类使用ViewModelProvince ViewModel可以构造如下:

class ProvinceViewModel : INotifyPropertyChanged
{
    private Province _Province;
    public string Name
    {
        get { return _Province.Name; }
        set
        {
            if (_Name == value) return;
            _Province.Name = value;
            OnPropertyChanged("Name");
        }
    }
    public ProvinceViewModel(Province province)
    {
        _Province = province;
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

请注意 INotifyPropertyChanged 的实现。你现在可能会问我为什么要实施它。为了更新您的View,您需要此界面来发布任何消息并通知您的View,您的Model中的某些内容已更改。

使用像Caliburn.Micro这样的框架怎么样?当然,这将保护你很多工作,一旦你进入它,就会感觉非常舒适。