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

前端没有更新的原因:

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{ } )); 是因为我在另一个线程中操作。如果是在主线程中更改前端,则不用写这个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值