Связывание Стиль текстового блока / Конвертер - PullRequest
0 голосов
/ 19 января 2012

у меня есть:

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

OrderType - это строка, которая потенциально может быть A, B, C, D. Но я хочу, чтобы текстовый блок отображал ДА, если (A или B), и НЕТ, если (С или D), но хочу, чтобы цвет переднего плана был зеленым, если A, Синий, если B, Желтый, если C, Красный, если D. Что будет лучший способ сделать это? Я немного сбит с толку, если я использую конвертер, с чем должен связываться триггер стиля или если есть лучший подход. Спасибо.

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Для этой цели следует использовать 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 голос
/ 19 января 2012

Вы можете делать это только с помощью триггеров, хотя есть некоторая избыточность:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...