該模型

該模型是 M VVM 中的第一個 M 。該模型通常是一個包含你希望通過某種使用者介面公開的資料的類。

這是一個非常簡單的模型類,它暴露了幾個屬性: -

public class Customer : INotifyPropertyChanged
{
    private string _forename;
    private string _surname;
    private bool _isValid;

    public event PropertyChangedEventHandler PropertyChanged;

    /// <summary>
    /// Customer forename.
    /// </summary>
    public string Forename
    {
        get
        {
            return _forename;
        }
        set
        {
            if (_forename != value)
            {
                _forename = value;
                OnPropertyChanged();
                SetIsValid();
            }
        }
    }

    /// <summary>
    /// Customer surname.
    /// </summary>
    public string Surname
    {
        get
        {
            return _surname;
        }
        set
        {
            if (_surname != value)
            {
                _surname = value;
                OnPropertyChanged();
                SetIsValid();
            }
        }
    }

    /// <summary>
    /// Indicates whether the model is in a valid state or not.
    /// </summary>
    public bool IsValid
    {
        get
        {
            return _isValid;
        }
        set
        {
            if (_isValid != value)
            {
                _isValid = value;
                OnPropertyChanged();
            }
        }
    }

    /// <summary>
    /// Sets the value of the IsValid property.
    /// </summary>
    private void SetIsValid()
    {
        IsValid = !string.IsNullOrEmpty(Forename) && !string.IsNullOrEmpty(Surname);
    }

    /// <summary>
    /// Raises the PropertyChanged event.
    /// </summary>
    /// <param name="propertyName">Name of the property.</param>
    private void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

該類實現了 INotifyPropertyChanged 介面,該介面公開了 PropertyChanged 事件。只要其中一個屬性值發生更改,就會引發此事件 - 你可以在上面的程式碼中看到這一點。PropertyChanged 事件是 WPF 資料繫結機制中的關鍵部分,因為沒有它,使用者介面將無法反映對屬性值的更改。

該模型還包含一個非常簡單的驗證例程,可以從屬性設定器中呼叫。它設定一個公共屬性,指示模型是否處於有效狀態。我已經包含了這個功能來演示 WPF 命令特殊功能,你很快就會看到它。 WPF 框架提供了許多更復雜的驗證方法,但這些方法超出了本文的範圍