1

非静的クラスColorManager(シングルトン)にHeaderColorPairsという名前の静的ObservableCollectionがあります。

このプロパティは、次のように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>

これがConvert-Methodです。

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は更新されません。

4

1 に答える 1

0

シングルトンパターン(これも機能しました)の代わりに、完全に機能する非静的プロパティを使用します。質問は解決しました;)

于 2012-09-26T08:57:18.270 に答える