【问题标题】:PropertyChanged not affected on collection changesPropertyChanged 不受集合更改的影响
【发布时间】:2013-10-13 10:07:11
【问题描述】:

我使用以下字典:

private Dictionary<string, string> _myDic;
public Dictionary<string, string> MyDic
{
   get
   {
       return _myDic;
   }
   set
   {
      if (_myDic!= value)
      {
         _myDic= value;
         NotifyPropertyChanged("MyDic");
      }
    }
}

在我看来是绑定到一个组合框。

一切正常。

问题是当我添加项目时,如果已经打开组合框,则不会更新。

只有当它从一开始就保持关闭时,更改才会出现在屏幕上。

我有一个地方可以将项目添加到字典中,然后我立即使用了propertychanged 事件,希望它会影响 UI:

MyDic.Add(strK, strV);
NotifyPropertyChanged("MyDic");

但这并没有帮助(尽管事件并没有为空)。

我理解这是因为它是集合的变化,而不是对象本身。我的问题是由于各种原因我无法将此变量的类型更改为cutsom ObservableDictionary。

我的问题是为什么NotifyPropertyChanged("MyDic"); 不受影响。有没有其他方法(除了改变类型)来处理这个问题?

【问题讨论】:

  • 您是否尝试过对字典的 Count 属性做同样的事情?
  • @user2760623。对字典的 Count 属性做同样的事情是什么意思?可以扩展吗?
  • 通知 Dictionary.Count 属性的变化。
  • 通知“不受影响”是什么意思?
  • @JonSkeet。我的意思是如果已经打开组合框,UI 中的列表不会改变。

标签: c# wpf mvvm dictionary inotifypropertychanged


【解决方案1】:

我发现了一种有点原始的方法。然而它奏效了。

我创建了另一个字典,并在其中添加了项目。

然后我把我的字典改成了本地字典:

Dictionary<string, string> _dic = new Dictionary<string, string>();
foreach (var str in MyDic)
   _dic.Add(str.Key, str.Value);
 _dic.Add(strK, strV);
  MyDic= _dic; 

如果有人有更好的方法我很想听。

【讨论】:

    猜你喜欢
    • 2015-12-04
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多