美文网首页
[WPF] ListBox的数据修改和刷新

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

作者: zhongwcool | 来源:发表于2020-04-17 18:26 被阅读0次

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

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?

相关文章

网友评论

      本文标题:[WPF] ListBox的数据修改和刷新

      本文链接:https://www.haomeiwen.com/subject/ysbyvhtx.html