绑定文本块样式/转换器

时间:2012-01-19 17:06:07

标签: wpf xaml data-binding mvvm

我有:

<TextBlock Text="{Binding OrderType}"/>

OrderType是一个字符串,可能是A,B,C,D。但是我想文本块如果(A或B)则显示YES,如果是(C或D)则显示NO,但是如果A则前景色为绿色,如果是B则为蓝色,如果是C则为黄色,如果是D则为红色。这将是什么最好的办法吗?如果我使用转换器,样式触发器应该绑定什么或者是否有更好的方法,我有点困惑。感谢。

2 个答案:

答案 0 :(得分:3)

您应该为此目的使用IValueConverter:

public class OrderTypeToYesNoConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
            if(value != null)
            {
                 string val = value.ToString();
                 if(val == "A" || val == "B")
                    return "YES"; 
            }
            return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
            throw new NotImplementedException();
    }
}

XAML

<Window
    ..
    ..
    xmlns:converters="clr-namespace:NameSpace;assembly=Assembly">
<Window.Resources>
    <converters:OrderTypeToYesNoConverter x:Key="OrderTypeToYesNoConverter"/> 
</Window.Resources>

<TextBlock Text="{Binding OrderType, Converter="{StaticResource OrderTypeToYesNoConverter}"/>

答案 1 :(得分:1)

可以仅使用触发器执行此操作,但有一些冗余:

<TextBlock>
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Style.Triggers>
                <DataTrigger Binding="{Binding OrderType}" Value="A">
                    <Setter Property="Text" Value="YES" />
                    <Setter Property="Foreground" Value="Green" />
                </DataTrigger>
                <DataTrigger Binding="{Binding OrderType}" Value="B">
                    <Setter Property="Text" Value="YES" />
                    <Setter Property="Foreground" Value="Blue" />
                </DataTrigger>
                <DataTrigger Binding="{Binding OrderType}" Value="C">
                    <Setter Property="Text" Value="NO" />
                    <Setter Property="Foreground" Value="Yellow" />
                </DataTrigger>
                <DataTrigger Binding="{Binding OrderType}" Value="D">
                    <Setter Property="Text" Value="NO" />
                    <Setter Property="Foreground" Value="Red" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>