该模型
该模型是 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 框架提供了许多更复杂的验证方法,但这些方法超出了本文的范围。