c# - .NET4.5 将组合框绑定(bind)到字典问题。 WPF

标签 c# wpf mvvm dictionary combobox

我正在维护一个内部 WPF 应用程序,它有一个 ComboBox 绑定(bind)到 ViewModel 中的 Dictionary 属性。该应用程序是用面向 .NET4.0 的 VS2010 编写的,一切正常。

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

xml:

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

View 模型属性:
    private Dictionary<string, string> _ModelArticleTypeCodeToTitleMapFilteredByCategory = ModelArticleTypeCodeToTitleMap;
    public Dictionary<string, string> ModelArticleTypeCodeToTitleMapFilteredByCategory
    {
        get { return _ModelArticleTypeCodeToChangeTitleMap; }
        set
        {
            _ModelArticleTypeCodeToChangeTitleMap = value;
            OnPropertyChanged("ModelArticleTypeCodeToChangeTitleMap");
        }
    }

最佳答案

好的,问题是由于 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));
    }
}

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

关于c# - .NET4.5 将组合框绑定(bind)到字典问题。 WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26401574/

相关文章:

wpf - 如何在wpf中的单向数据绑定(bind)中控制 "update trigger"?

c# - WPF中ViewModels之间如何通信以及如何控制Views生命周期

mvvm - 覆盖 KendoUI 启用的绑定(bind)

c# - 如何使用 MVVM 在 wpf 中以编程方式在选项卡项中添加控件

c# - Linux 系统在 .NET Core 应用程序上引发错误

C# 从多个抽象类派生类

c# - 如何在 C# 中使用 redis pipiline(StackExchange.Redis)?

c# - Vista、Office Interop 不工作

c# - WPF 从父级覆盖 IsEnabled

c# - 连续进行多个属性更改,每个都会影响 UIElement 的外观,是否会导致一次或多次重绘?