在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
事件,从而更新视图。