0

ItemSource が MyClass の ListCollectionView である ComboBox があります。ComboBox は、次の ItemTemplate を使用します。

<Style x:Key="StyleComboBoxGroups" BasedOn="{StaticResource BaseComboBox}" TargetType="{x:Type ComboBox}">
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <BulletDecorator VerticalAlignment="Center">
                        <BulletDecorator.Bullet>
                            <Ellipse Margin="3,0,0,0" Width="4" Height="4"/>
                        </BulletDecorator.Bullet>
                        <TextBlock Margin="3,0,0,0" Style="{StaticResource BaseTextBlock}" Text="{Binding}"/>
                    </BulletDecorator>
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

MyClass は 2 つのプロパティを公開します。

パブリック シール クラス MyClass { public MyEnum Property1 { get; 設定; } パブリック文字列 Property2 { get; 設定; } }

Property1 に応じて TextBlock.Foreground カラーを作成する方法を理解しようとしています。しばらくの間、私はこれらを無駄にしようとしました:

Foreground="{Binding Property1, Converter=MyEnumToColorConverter}"
Foreground="{Binding Converter=MyEnumToColorConverter, Path=Property1}"
Foreground="{Binding Converter=MyEnumToColorConverter, Path=Property1, Source={Binding}}"

しかし、私は常に例外を取得します。ComboBox アイテムに正しくバインドするにはどうすればよいですか?

4

2 に答える 2

1

コンバーターのインスタンスとなるリソースを宣言します。

<Style.Resources>
    <namespace:MyEnumToColorConverter x:Key="MyEnumToColorConverter" />
</Style.Resources>

…次に、バインディングでそのリソースを使用します。

Foreground="{Binding Property1, Converter={StaticResource MyEnumToColorConverter}}"

別の方法は、コンバーターを静的に参照することです。この場合、リソース インスタンスを作成する必要はありません。コンバーターをシングルトンに変換します。

public class MyEnumColorConverter : IValueConverter
{
    private MyEnumColorConverter() { }

     private static IValueConverter _instance;
     public static IValueConverter Instance
     {
          get { return _instance ?? (_instance = new MyEnumColorConverter); }
     }

     // implement IValueConverter

}

XAML では、次のように参照します。

Foreground="{Binding Property1, Converter={x:Static namespace:MyEnumColorConverter.Instance}}"
于 2013-05-17T20:31:02.263 に答える
1

実際に type のコンバーターがある場合MyEnumToColorConverter、それをバインディングで使用するには、最初にそのインスタンスを宣言する必要があります。通常、Resources親コントロール (またはスタイル) のセクションで次のように行います。

<Style.Resources>
    <myNamespace:MyEnumToColorConverter x:Key="EnumToColorConverter" />
</Style.Resources>

StaticResource次に、マークアップ拡張機能を使用して参照できます。

Foreground="{Binding Path=Property1, Converter={StaticResource EnumToColorConverter}}"
于 2013-05-17T20:31:21.997 に答える