在C#中,可以使用INotifyPropertyChanged接口来实现属性变更通知。这个接口要求实现一个名为PropertyChanged的事件,当属性值发生变化时,会触发此事件。以下是一个简单的示例:
首先,创建一个名为INotifyPropertyChanged的接口:
public interface INotifyPropertyChanged
{
event PropertyChangedEventHandler PropertyChanged;
}
然后,创建一个基类BaseViewModel,实现INotifyPropertyChanged接口:
public abstract class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
接下来,创建一个包含属性的视图模型类,继承自BaseViewModel:
public class MyViewModel : BaseViewModel
{
private string _myProperty;
public string MyProperty
{
get { return _myProperty; }
set
{
if (_myProperty != value)
{
_myProperty = value;
OnPropertyChanged();
}
}
}
}
在这个例子中,当MyProperty的值发生变化时,会触发PropertyChanged事件。你可以在XAML中绑定这个属性到视图,当属性值发生变化时,视图将自动更新。
例如,在XAML中创建一个TextBox,并将其绑定到MyProperty:
<Window x:Class="YourNamespace.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:YourNamespace"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Text="{Binding MyProperty}" />
</Grid>
</Window>
在代码中,将MyViewModel实例设置为窗口的数据上下文:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MyViewModel();
}
}
现在,当你在TextBox中更改文本时,MyProperty的值会发生变化,并触发PropertyChanged事件,从而更新视图。