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不会更新。
据我所知,静态变量不会触发'PropertyChanged'事件=>您的绑定不会自动更新。这里有两个解决方案:1 /使用方法'BindingExpression.UpdateTarget'手动更新绑定,或者2绑定到非静态变量 – Damascus
谢谢您的回答。奇怪的是,如果我只是将ItemsSource绑定到静态属性(无多重绑定)并在代码隐藏中更改集合,那么listview会立即更新。我如何获得多重绑定的绑定表达式? getbindingexpression在我认为不起作用。 –
我想我将使用单例模式而不是静态属性。使用单例模式时重要的一件事情? –