[英].NET4.5 Binding a Combobox to a Dictionary Issues. WPF
我正在维护一个内部WPF应用程序,该应用程序具有绑定到ViewModel中的Dictionary属性的ComboBox。 该应用程序是针对NET2010的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");
}
}
好的,此问题是由于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");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.