.NET4.5将组合框绑定到字典问题。 WPF

问题描述:

我正在维护一个内部WPF应用程序,它具有绑定到ViewModel中的Dictionary属性的ComboBox。该应用程序是在VS2010中编写的,面向.NET4.0,一切正常。.NET4.5将组合框绑定到字典问题。 WPF

用户机器现在自动更新到.NET4.5 &此特定ComboBox在运行时不显示UI中的值。这是应用程序中对Dictionary的唯一绑定。我在VS2013中搜索了输出窗口,但没有明显的绑定错误等。有一种方法填充字典&所有填充正确&我已经实现了INPC。 .NET4.5绑定到字典的方式有什么不同吗?

的XAML:

<ComboBox ItemsSource="{Binding Path=ModelArticleTypeCodeToChangeTitleMap, 
          Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
          Converter={StaticResource invertBoolConverter}}" 
          IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Value" 
          SelectedValuePath="Key" 
          SelectedValue="{Binding ModelSelectedArticleTypeCode}" 
          Text="{Binding ModelEnteredTitle}" /> 

视图模型属性:

private Dictionary<string, string> _ModelArticleTypeCodeToTitleMapFilteredByCategory = ModelArticleTypeCodeToTitleMap; 
    public Dictionary<string, string> ModelArticleTypeCodeToTitleMapFilteredByCategory 
    { 
     get { return _ModelArticleTypeCodeToChangeTitleMap; } 
     set 
     { 
      _ModelArticleTypeCodeToChangeTitleMap = value; 
      OnPropertyChanged("ModelArticleTypeCodeToChangeTitleMap"); 
     } 
    } 
+0

哪里'ModelArticleTypeCodeToChangeTitleMap'财产? – 2014-10-16 10:07:14

+0

是的,我有该属性暴露,值在运行时分配给字典。一切都按预期在.NET4.0中运行,所以我知道视图模型提供了要绑定的数据。 – Hardgraf 2014-10-16 10:09:34

+0

很难相信绑定可以在.net 4.0和.net 4.5之间有很大的不同,你应该更好地尝试修改项目中所有可能的代码。 – 2014-10-16 10:22:08

好吧,这个问题是由于INotifyPropertyChanged的不是一个静态属性工作的落实。我写的PropertyChanged事件的静态版本,并提出在属性setter事件:

// INotifyPropertyChanged event for static properties! 
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged; 

private static void NotifyStaticPropertyChanged(string propertyName) 
{ 
    if (StaticPropertyChanged != null) 
    { 
     StaticPropertyChanged(null, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

物业:

private Dictionary<string, string> _ModelArticleTypeCodeToTitleMapFilteredByCategory = ModelArticleTypeCodeToTitleMap; 
public Dictionary<string, string> ModelArticleTypeCodeToTitleMapFilteredByCategory 
{ 
    get { return _ModelArticleTypeCodeToChangeTitleMap; } 
    set 
    { 
     _ModelArticleTypeCodeToChangeTitleMap = value;    
     NotifyStaticPropertyChanged("ModelArticleTypeCodeToChangeTitleMap"); 
    } 
}