WPF绑定(Binding)绑定对象集合修改显示属性问题

本文探讨了在WPF中使用Binding绑定ObservableCollection中的自定义类对象时,如何处理显示属性更新的问题。当修改选中Student对象的Name属性后,列表并未实时更新。原因是Student类的Name属性需要实现INotifyPropertyChanged接口,以便在属性变化时通知视图进行刷新,从而达到数据绑定的预期效果。
部署运行你感兴趣的模型镜像

问题描述:

我打算选中列表中的字段,用文本框的值替换选中的字段。

然而在使用Binging将存放自定义类(Student)的集合绑定到ListBox上,显示的是这个类的“Name”属性。在修改这个属性后却没有看到列表中选中字段的变化。

ListBox取值绑定存储Sutdent类的对象。

之所以用ObservableCollection是因为:(出自《深入浅出WPF》)

 ObservableCollection<Student> oc = new ObservableCollection<Student>();
        public MainWindow()
        {
            InitializeComponent();
            
            oc.Add(new Student("kobe"));
            oc.Add(new Student("jordan"));
            oc.Add(new Student("tracy"));
            this.listBox.ItemsSource = oc;//绑定数据源为集合
            this.listBox.DisplayMemberPath = "Name";//显示为Student类Name属性
        }

Student类:

    class Student
    {
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public Student(string name)
        {
            this.Name = name;
        }

    }

Button事件:

private void Button_Click(object sender, RoutedEventArgs e)
        {
            int selectInedx = this.listBox.SelectedIndex;
            if(selectInedx>=0)
                oc[selectInedx].Name = this.textBox.Text;
            
        }

最后却发现,即便是点击事件修改了选中对象的Name属性后列表中的名字并没有改变。而这并不符合介绍的数据绑定的特点,于是找了很多地方最终在这里找到了解决方法。


原来,存储在集合中的自定义类的显示的属性必须实现INotifyPropertyChanged接口,这样属性值发生变化时会触发PropertyChanged事件进而可以使ListBox显示内容改变。具体代码如下:

class Student : INotifyPropertyChanged
    {
        private string name;

        public string Name
        {
            get { return name; }
            set
            {
                name = value;
                if (this.PropertyChanged != null)//重要部分
                {
                    this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));
                }
            }
        }
        public Student(string name)
        {
            this.Name = name;
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值