我正在维护一个内部WPF应用程序,该应用程序的ComboBox绑定到ViewModel中的Dictionary属性。该应用程序是在面向.NET4.0的VS2010中编写的,一切正常。
用户计算机现在自动更新到.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}" />
ViewModel属性:
private Dictionary<string, string> _ModelArticleTypeCodeToTitleMapFilteredByCategory = ModelArticleTypeCodeToTitleMap;
public Dictionary<string, string> ModelArticleTypeCodeToTitleMapFilteredByCategory
{
get { return _ModelArticleTypeCodeToChangeTitleMap; }
set
{
_ModelArticleTypeCodeToChangeTitleMap = value;
OnPropertyChanged("ModelArticleTypeCodeToChangeTitleMap");
}
}
答案 0 :(得分:0)
好的,问题是由于INotifyPropertyChanged的实现没有使用静态属性。我编写了一个静态版本的PropertyChanged事件,并在属性设置器中引发了事件:
// 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");
}
}