WPF Listview绑定数据发生改变后前端没有更新

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/djshichaoren/article/details/79957523

前端没有更新的原因:

1.将控件与列表绑定

ICMask.ItemsSource = _poppingWordList;

2.在更新绑定数据时

_poppingWordList = newWordList;

因为List是引用,这样是将_poppingWordList的指向的列表更换了,而ICMask.ItemsSource指向的列表并没有更新。

我的解决方法:

方法一:重新绑定

        private ObservableCollection<PoppingWord> _poppingWordList=new ObservableCollection<PoppingWord>();
        public ObservableCollection<PoppingWord> _PoppingWordList
        {
            get
            {
                return _poppingWordList;
            }
            set
            {
                if (value == null || value.Count < 1)
                    return;

                //重新绑定
               _poppingWordList = value;
               ICMask.ItemsSource = _poppingWordList;
            }
        }

将list与_poppingWordList绑定,用_PoppingWordList对_poppingWordList封装,_PoppingWordList在收到赋值以后,将_poppingWordList重新绑定到ICMask上。

方法二:不对整个列表赋值,将绑定的列表清空再添加

        private ObservableCollection<PoppingWord> _poppingWordList=new ObservableCollection<PoppingWord>();
        public ObservableCollection<PoppingWord> _PoppingWordList
        {
            get
            {
                return _poppingWordList;
            }
            set
            {
                if (value == null || value.Count < 1)
                    return;                

                Dispatcher.BeginInvoke(new Action(delegate
                {
                    //清空原先的列表
                    _poppingWordList.Clear();
                    //向列表中加入单词块
                    foreach(PoppingWord poppingWord in value)
                    {
                        _poppingWordList.Add(poppingWord);
                    }

                }));
            }
        }

用_PoppingWordList对_poppingWordList封装,_PoppingWordList在收到新的值后将新列表的元素添加到_poppingWordList中,也就是添加到列表的ItemsSource中。

注意:

1.列表不能用List<T>,而应该用ObservableCollection<T>,这样控件的ItemsSource更新以后,前端才会刷新。

2.我使用

Dispatcher.BeginInvoke(new Action(delegate{ } )); 是因为我在另一个线程中操作。如果是在主线程中更改前端,则不用写这个。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页