該模型
該模型是 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 框架提供了許多更復雜的驗證方法,但這些方法超出了本文的範圍。