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文本的值发生改变
}
}