wpf 模型
示例
该模型是MVVM中的第一个“M”。该模型通常是一个类,其中包含您要通过某种用户界面公开的数据。
这是一个非常简单的模型类,它具有几个属性:
public class Customer : INotifyPropertyChanged
{
private string _forename;
private string _surname;
private bool _isValid;
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
///客户的名字。
/// </summary>
public string Forename
{
get
{
return _forename;
}
set
{
if (_forename != value)
{
_forename = value;
OnPropertyChanged();
SetIsValid();
}
}
}
/// <summary>
///客户姓氏。
/// </summary>
public string Surname
{
get
{
return _surname;
}
set
{
if (_surname != value)
{
_surname = value;
OnPropertyChanged();
SetIsValid();
}
}
}
/// <summary>
///指示模型是否处于有效状态。
/// </summary>
public bool IsValid
{
get
{
return _isValid;
}
set
{
if (_isValid != value)
{
_isValid = value;
OnPropertyChanged();
}
}
}
/// <summary>
///设置IsValid属性的值。
/// </summary>
private void SetIsValid()
{
IsValid = !string.IsNullOrEmpty(Forename) && !string.IsNullOrEmpty(Surname);
}
/// <summary>
///引发PropertyChanged事件。
/// </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框架提供了许多更复杂的验证方法,但是这些方法不在本文的讨论范围之内。