C# 刷新wpf中的可观察字典、列表框
我在WPF应用程序中的listbox控件上绑定了通用可观察字典。我每5秒就得到一个新的数据作为可观察字典 我想在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
//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更简单。