2014-10-17 57 views
0

與此問題圍成一圈。屬性更改通知綁定到靜態字典?

我有2個組合框。用戶在第一個組合框上作出選擇&第二個組合框根據第一個選擇顯示選項。

我將第二個ComboBox綁定到我的視圖模型中公開的靜態Dictionary<string,string>。我有另一個公共財產,在靜態字典上提出INPC。在UI中,更改不會顯示。我在輸出窗口中沒有出現錯誤。有什麼我失蹤?

p.s.這在.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"); 
     } 
    } 

的XAML:

<ComboBox DisplayMemberPath="Value" HorizontalAlignment="Left", Converter={StaticResource invertBoolConverter}}" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Path=ModelArticleCategoryToTitleMap, Mode=TwoWay}" SelectedValue="{Binding ModelSelectedArticleCategory}" SelectedValuePath="Key"/> 
<ComboBox ItemsSource="{Binding Path=ModelArticleTypeCodeToChangeTitleMap, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding IsEditModeTitleReadOnly, Converter={StaticResource invertBoolConverter}}" IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Value" SelectedValuePath="Key" SelectedValue="{Binding ModelSelectedArticleTypeCode}" Text="{Binding ModelEnteredTitle}" TabIndex="1" /> 
+0

嘗試提高一個叫做'ModelArticleTypeCodeToChangeTitleMapChanged',而不是使用'INotifyPropertyChanged'靜態事件。 – 2014-10-17 14:41:51

+0

發現這個http://stackoverflow.com/questions/11473256/twoway-binding-of-a-combobox-to-a-static-property-in-net-4-5,好像它可能是一個錯誤?我已經安裝了4.5.2,但仍然沒有運氣... – Hardgraf 2014-10-17 14:42:18

+0

解決方法:將其移動到單身。將該單例添加爲app.xaml中的資源,並且可以使用StaticResource綁定來訪問它。 – Will 2014-10-17 14:48:50

回答

0

好,感謝@Mike Strobel,這個問題是由於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"); 
     } 
    }