[WPF] ListBox的数据修改和刷新

为建立中文知识库加块砖        ——中科大胡不归

0. 问题描述

作为wpf的初学者,最近处理MVVM下动态增加和修改ListBox的数据时遇到数据修改后界面不刷新的问题。可能是简单的问题,只是作为新手难免射箭找不到靶。记录下来,方便后来人。

1. 解决方法

1.1 修改前

参照MVVM的规范,绘制界面数据列表显示如下:


Model代码:

namespace WPFDemo.Model
{
    public class UserInfo
    {
        public Brush UserBackground { get; set; }
        public string Header { get; set; }
        public string Name { get; set; }
        public string Info { get; set; }
        public int Count { get; set; }
    }
}

这样的写法本来没什么问题,只是当我们动态修改列表的数据,界面不会刷新。

1.2 修改后

查询之后在StackOverflow找到一个未被采纳的答案,验证之后正是我们要的答案。关键在于Model作为被绑定的数据源也需要继承INotifyPropertyChanged接口,才能发出数据变更广播实现界面刷新。

Model代码:

public class UserInfo:INotifyPropertyChanged
    {
        public Brush UserBackground { get; set; }

        public string Header { get; set; }

        public string Name { get; set; }

        public string Info { get; set; }

        private int _count;
        public int Count
        {
            get { return _count; }
            set
            {
                _count = value;
                OnPropertyChanged("Count");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

这里只演示更改Count属性,修改其他属性参考此即可。
修改效果如图:


参考文章:

  1. C# WPF MVVM 实战 - 1
  2. EASY way to refresh ListBox in WPF?
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容