C# 刷新wpf中的可观察字典、列表框

C# 刷新wpf中的可观察字典、列表框,c#,wpf,dictionary,observable,C#,Wpf,Dictionary,Observable,我在WPF应用程序中的listbox控件上绑定了通用可观察字典。我每5秒就得到一个新的数据作为可观察字典 我想在wpf应用程序中刷新这个新字典列表框 我的答案是: //this dic is bind on listbox private MyObservableDictionary<string, Friend> _friends; //new data private MyObservableDictionary<string, Frien

我在WPF应用程序中的listbox控件上绑定了通用可观察字典。我每5秒就得到一个新的数据作为可观察字典

我想在wpf应用程序中刷新这个新字典列表框

我的答案是:

//this dic is bind on listbox
        private MyObservableDictionary<string, Friend> _friends;

//new data
        private MyObservableDictionary<string, Friend> _freshFriends;

....

//get data from server
            _freshFriends = _service.LoadFriends(Account);


            _friends.Clear();

//refresh dic
            foreach (var freshFriend in _freshFriends)
            {
                _friends.Add(freshFriend);
            }
//此dic在listbox上绑定
私人MyObservableDictionary\u friends;
//新数据
私人MyObservableDictionary\u freshFriends;
....
//从服务器获取数据
_freshFriends=_service.LoadFriends(帐户);
_朋友们;
//刷新dic
foreach(var freshFriend in_freshFriends)
{
_添加(freshFriend);
}
我的解决方案很好,但有简单好的方法吗?感谢您的建议。

实现(它使任何内容都“可见”),以便WPF知道您何时直接分配给好友列表。换句话说,让您的朋友列出一个属性而不是字段,并在
集合
块:)上激发PropertyChanged委托


希望有帮助,阅读链接,你会在那里找到更多信息。如果您有任何问题,请发表评论。

因为您有自己的
MyObservableDictionary
,您可以对它实现一个
AddRange
函数,只需这样称呼它:
\u friends.AddRange(\u freshFriends)
如果您还想添加其他集合,这可以减少代码重复。

是的,如果您将整个新集合分配给该属性,则在上实现INotifyPropertyChanged会提醒绑定。INotifyCollectionChanged仅在集合中的元素发生更改时才执行。它是可观察字典,因此必须强制INotifyCollectionChanged和INotifyPropertyChanged。我想减少刷新字典时的代码。@jminarik字典的INotifyCollectionChanged仅在您添加/删除元素时才会触发[当元素被修改时也会触发,但仅当它们实现INotifyPropertyChanged时才会触发],但当您直接将另一个字典分配给朋友时不会触发,换句话说,朋友被交换,尽管它没有改变。我知道,WPF很奇怪,但它比WinForms更简单。