当前位置:   article > 正文

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

wpf inotifypropertychanged

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;//事件的声明
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

完成对text文本的值更改

   <Grid>
        <StackPanel>
            <TextBox Text="{Binding Name}"></TextBox>
        <Button  Content="show" Command="{Binding showCommand}"></Button>
        </StackPanel>
    </Grid>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

namespace Demo1
{
    public class ViewModelBase : INotifyPropertyChanged
    {

        public event PropertyChangedEventHandler? PropertyChanged;//定义事件
        public  void onproperchanged(string propername)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("propername"));
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

继承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);

        }
      
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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

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

此时不需要传入参数

  public string Name {
            get { return name; }
            set {
                name = value;//设置value的值 但需要调用PropertyChanged
                onproperchanged(); //将name的值传入到Name当中 从而使text文本的值发生改变
            }
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/567801
推荐阅读
相关标签
  

闽ICP备14008679号