2012-09-10 21 views
0

我有非靜態類ColorManager(單例)中名爲HeaderColorPairs的靜態ObservableCollection>。MultiBinding到靜態屬性和非靜態 - 列表視圖不更新

此屬性綁定到ListView的的ItemsSource這樣的:

 <ListView.ItemsSource> 
      <MultiBinding Converter="{StaticResource xmlFormatter}" ConverterParameter="ColorList"> 
       <Binding Source="{StaticResource ResourceKey=colorManager}" Path="HeaderColorPairs"></Binding> 
       <Binding Path="LogEntryListViewModel.SelectedLogEntry.Model.RawXml"></Binding> 
      </MultiBinding> 
     </ListView.ItemsSource> 

這就是轉換法:

public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture) 
    { 
     //parameter = outputtype 
     parameter = (parameter == null) ? "" : parameter; 
     string rawXml = value[1].ToString(); 
     if (rawXml != DependencyProperty.UnsetValue.ToString() && rawXml != string.Empty) 
     { 
      OutputTypes opt = (OutputTypes)Enum.Parse(typeof(OutputTypes), parameter.ToString().Length.ToString()); 
      if (opt == OutputTypes.Xml) 
      { 
       RawXmlFormatter rxf = new RawXmlFormatter(rawXml); 
       return rxf.XmlStringArrayToRunList(); 
      } 
      else if (opt == OutputTypes.ColorList) 
      { 
       return ColorManager.GetColorsRelatedToXml(rawXml); 
      } 
     } 
     return null; 
    } 


public static ObservableCollection<KeyValuePair<string, Color>> GetColorsRelatedToXml(string rawXml) 
    { 
     List<string> headerList = RawXmlFormatter.GetHeadersFromRawXml(rawXml); 
     SetUnsetColors(headerList); 
     return new ObservableCollection<KeyValuePair<string, Color>>(HeaderColorPairs.Where(kvp => headerList.Contains(kvp.Key))); 
    } 

的結合的偉大工程,它顯示的ObservableCollection正確的,但如果我在代碼隱藏中改變集合,ListView不會更新。

+1

據我所知,靜態變量不會觸發'PropertyChanged'事件=>您的綁定不會自動更新。這裏有兩個解決方案:1 /使用方法'BindingExpression.UpdateTarget'手動更新綁定,或者2綁定到非靜態變量 – Damascus

+0

謝謝您的回答。奇怪的是,如果我只是將ItemsSource綁定到靜態屬性(無多重綁定)並在代碼隱藏中更改集合,那麼listview會立即更新。我如何獲得多重綁定的綁定表達式? getbindingexpression在我認爲不起作用。 –

+0

我想我將使用單例模式而不是靜態屬性。使用單例模式時重要的一件事情? –

回答

0

而不是單身模式(也工作)我現在使用非靜態屬性,它完美的作品。問題解決了;)