【问题标题】:Refresh observable dictionary , listbox in wpf刷新可观察字典,wpf中的列表框
【发布时间】:2011-01-01 15:01:22
【问题描述】:

我在 WPF 应用程序的列表框控件上绑定通用可观察字典。我每 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);
            }

我的解决方案效果很好,但是存在任何简单而好的方法吗?感谢您的想法。

【问题讨论】:

    标签: c# wpf dictionary observable


    【解决方案1】:

    实现INotifyPropertyChanged(它使任何东西“可观察”),以便 WPF 知道您何时直接分配给好友列表。换句话说,让你的朋友列出一个属性而不是一个字段,并在 set 块上触发 PropertyChanged 委托:)

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

    【讨论】:

    • 是的,如果您将一个全新的集合分配给该属性,则在 _friends 上实现 INotifyPropertyChanged 将提醒绑定。 INotifyCollectionChanged 仅在集合中的元素发生变化时才会这样做。
    • 它是可观察的字典,因此它必须包含 INotifyCollectionChanged 和 INotifyPropertyChanged。我想减少刷新字典的代码。
    • @jminarik 字典的 INotifyCollectionChanged 只会在您添加/删除元素时触发[它也会在元素被修改时触发,但前提是它们实现 INotifyPropertyChanged] 但不会在您直接将另一个字典分配给朋友时触发,在换句话说,朋友被交换了,尽管它没有改变。我知道,WPF 很奇怪,但它比 WinForms 更容易。
    【解决方案2】:

    由于您有自己的MyObservableDictionary,您可以对其实现AddRange 函数并像这样调用它:_friends.AddRange(_freshFriends); 如果您还想添加其他集合,这可以减少代码重复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 2015-03-08
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多