温馨提示×

c# get set如何实现属性变更通知

c#
小樊
84
2024-11-23 18:21:31
栏目: 编程语言

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

0