0

我有一个 ComboBox,它的 ItemSource 是 MyClass 的 ListCollectionView。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 公开了两个属性:

公共密封类 MyClass { public MyEnum Property1 { get; 放; } 公共字符串属性 2 { 获取;放; } }

我试图弄清楚如何根据 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 回答