Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 属性更改通知绑定到静态字典?_C#_Wpf_Mvvm_Dictionary_Combobox - Fatal编程技术网

C# 属性更改通知绑定到静态字典?

C# 属性更改通知绑定到静态字典?,c#,wpf,mvvm,dictionary,combobox,C#,Wpf,Mvvm,Dictionary,Combobox,在这个问题上我们一直在兜圈子 我有两个组合框。用户在第一个组合框上进行选择&第二个组合框根据第一个选择显示选项 我正在将第二个组合框绑定到视图模型中公开的静态字典。我有另一个公共属性,它在静态字典上引发INPC。在UI中,不会显示更改。我在输出窗口中没有收到任何错误。有什么我遗漏的吗 p、 这在.NET4.0下运行良好。一旦用户机器安装了.NET4.5,这种行为只会从绑定到字典的1组合框开始 特性: private static Dictionary<string, string&

在这个问题上我们一直在兜圈子

我有两个组合框。用户在第一个组合框上进行选择&第二个组合框根据第一个选择显示选项

我正在将第二个
组合框
绑定到视图模型中公开的静态
字典
。我有另一个公共属性,它在静态字典上引发INPC。在UI中,不会显示更改。我在输出窗口中没有收到任何错误。有什么我遗漏的吗

p、 这在.NET4.0下运行良好。一旦用户机器安装了.NET4.5,这种行为只会从绑定到字典的1组合框开始

特性:

    private static Dictionary<string, string> _ModelArticleTypeCodeToChangeTitleMap;
    public static Dictionary<string, string> ModelArticleTypeCodeToChangeTitleMap
    {
        get { return _ModelArticleTypeCodeToChangeTitleMap; }
        set 
        { 
            _ModelArticleTypeCodeToChangeTitleMap = value;               
        }
    }

    //Default ArticleTypeCodeToTitleMapFilteredByCategory dictionary to the full list (as no Category will have been initially selected)
    private Dictionary<string, string> _ModelArticleTypeCodeToTitleMapFilteredByCategory = ModelArticleTypeCodeToTitleMap;
    public Dictionary<string, string> ModelArticleTypeCodeToTitleMapFilteredByCategory
    {
        get { return _ModelArticleTypeCodeToChangeTitleMap; }
        set
        {
            _ModelArticleTypeCodeToChangeTitleMap = value;
            OnPropertyChanged("ModelArticleTypeCodeToChangeTitleMap");
        }
    }
私有静态字典\u ModelArticleTypeCodeToChangeTitleMap;
公共静态字典模型ArticleTypeCodeToChangeTitleMap
{
获取{return\u ModelArticleTypeCodeToChangeTitleMap;}
设置
{ 
_ModelArticleTypeCodeToChangeTitleMap=值;
}
}
//完整列表中的默认ArticleTypeCodeToTitleMapFilteredByCategory字典(因为最初不会选择任何类别)
专用词典_ModelArticleTypeCodeToTitleMapFilteredByCategory=ModelArticleTypeCodeToTitleMap;
公共字典模型ArticleTypeCodeToTitleMapFilteredByCategory
{
获取{return\u ModelArticleTypeCodeToChangeTitleMap;}
设置
{
_ModelArticleTypeCodeToChangeTitleMap=值;
OnPropertyChanged(“ModelArticleTypeCodeToChangeTitleMap”);
}
}
Xaml:


好的,谢谢@Mike Strobel该问题是由于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));
        }
    }
//静态属性的INotifyPropertyChanged事件!
公共静态事件EventHandler StaticPropertyChanged;
私有静态void NotifyStaticPropertyChanged(字符串propertyName)
{
if(StaticPropertyChanged!=null)
{
StaticPropertyChanged(空,新PropertyChangedEventArgs(propertyName));
}
}
财产:

    private Dictionary<string, string> _ModelArticleTypeCodeToTitleMapFilteredByCategory = ModelArticleTypeCodeToTitleMap;
    public Dictionary<string, string> ModelArticleTypeCodeToTitleMapFilteredByCategory
    {
        get { return _ModelArticleTypeCodeToChangeTitleMap; }
        set
        {
            _ModelArticleTypeCodeToChangeTitleMap = value;             
            NotifyStaticPropertyChanged("ModelArticleTypeCodeToChangeTitleMap");
        }
    }
private Dictionary\u ModelArticleTypeCodeToTitleMapFilteredByCategory=ModelArticleTypeCodeToTitleMap;
公共字典模型ArticleTypeCodeToTitleMapFilteredByCategory
{
获取{return\u ModelArticleTypeCodeToChangeTitleMap;}
设置
{
_ModelArticleTypeCodeToChangeTitleMap=值;
NotifyStaticPropertyChanged(“ModelArticleTypeCodeToChangeTitleMap”);
}
}

尝试引发一个名为
ModelArticleTypeCodeToChangeTitleMapChanged
的静态事件,而不是使用
INotifyPropertyChanged
。发现此问题,可能是一个错误?我已经安装了4.5.2,但仍然不走运……解决方法:将其移动到单例。将该单例添加为app.xaml中的资源,您可以使用StaticResource绑定来访问它。看起来此链接对您很有帮助@Will,您是否有在ViewModel中公开1个单例属性的示例?显然,我不希望整个ViewModel作为一个单例类&属性需要存在于ViewModel中。干杯
    private Dictionary<string, string> _ModelArticleTypeCodeToTitleMapFilteredByCategory = ModelArticleTypeCodeToTitleMap;
    public Dictionary<string, string> ModelArticleTypeCodeToTitleMapFilteredByCategory
    {
        get { return _ModelArticleTypeCodeToChangeTitleMap; }
        set
        {
            _ModelArticleTypeCodeToChangeTitleMap = value;             
            NotifyStaticPropertyChanged("ModelArticleTypeCodeToChangeTitleMap");
        }
    }