Wpf:通知更改的使用(INotifyPropertyChanged )

文章介绍了在WPF中如何利用INotifyPropertyChanged接口来实现数据模型的属性变化通知视图,从而更新UI。通过创建一个ViewModel基类ViewModelBase,封装了属性变更的处理方法,使得在子类中可以更方便地调用。同时,文章提到了CallerMemberName特性,允许在不传入参数的情况下自动识别修改的属性名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Wpf:通知更改的使用(INotifyPropertyChanged )

INotifyPropertyChanged 接口:用于向客户端(通常是执行绑定的客户端)发出某一属性值已更改的通知。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace Demo1
{
    public class MainViewModel:INotifyPropertyChanged
    {
        //创建一个类 用于事件的处理
        //如何和按钮建立关系 使用Icommand接口 用于建立连接
        public MainViewModel ()
        {
            Name = "Text";
            showCommand = new MyCommand(show);//传入对应的参数
        }
        private string name;
        public string Name {
            get { return name; }
            set {
                name = value;//设置value的值 但需要调用PropertyChanged
                PropertyChanged ?.Invoke(this, new PropertyChangedEventArgs("Name"));//将name的值传入到Name当中 从而使text文本的值发生改变 将值更改到UI界面上
            }
        }//默认值
        public MyCommand showCommand { get; set; }
 
        public void show()
        {
            Name = "请点击我一下";

            MessageBox.Show(Name);

        }
        public event PropertyChangedEventHandler? PropertyChanged;//事件的声明
    }
}

完成对text文本的值更改

   <Grid>
        <StackPanel>
            <TextBox Text="{Binding Name}"></TextBox>
        <Button  Content="show" Command="{Binding showCommand}"></Button>
        </StackPanel>
    </Grid>

对于对多个值的更改 将调用的内容 封装到对应的函数 可以添加一个专门用于更改值的类中

namespace Demo1
{
    public class ViewModelBase : INotifyPropertyChanged
    {

        public event PropertyChangedEventHandler? PropertyChanged;//定义事件
        public  void onproperchanged(string propername)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("propername"));
        }
    }
}

继承ViewModelBase 类即可 在具体使用的时候调用onproperchanged函数

namespace Demo1
{
    public class MainViewModel: ViewModelBase//重点***
    {
        //创建一个类 用于事件的处理
        //如何和按钮建立关系 使用Icommand接口 用于建立连接
        public MainViewModel ()
        {
            Name = "Text";
            showCommand = new MyCommand(show);//传入对应的参数
        }
        private string name;
        public string Name {
            get { return name; }
            set {
                name = value;//设置value的值 但需要调用PropertyChanged
                onproperchanged("Name"); //将name的值传入到Name当中 从而使text文本的值发生改变  重点***
            }
        }//默认值
        public MyCommand showCommand { get; set; }
 
        public void show()
        {
            Name = "请点击我一下";

            MessageBox.Show(Name);

        }
      
    }
}

如何让函数自动识别需要修改的值???
需要修改封装的类

public  void onproperchanged([CallerMemberName] string propername="")

此时不需要传入参数

  public string Name {
            get { return name; }
            set {
                name = value;//设置value的值 但需要调用PropertyChanged
                onproperchanged(); //将name的值传入到Name当中 从而使text文本的值发生改变
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值