WPF XAML - DataTriggers или ValueConverters? Лучшая практика

У меня есть окно с TextBlock, это TextBlock должен показывать значение "R", если связанное значение равно 0, или "M", если связанное значение равно 1.

У меня есть две возможности:

Подход ValueConverter

<TextBlock Binding="{Binding Path=Value, Converter={StaticResource valConverter}}"/>

куда valConverter является IValueConverter класс, который возвращает "M" или "R", если значение равно 0 или 1 соответственно.

[omitted class]

DataTrigger подход

<TextBlock>
    <TextBlock.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Value}" Value="0">
                    <Setter Property="TextBlock.Text" Value="R"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=Value}" Value="1">
                    <Setter Property="TextBlock.Text" Value="M"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

По вашему мнению, какой подход лучше?

2 ответа

Решение

Конвертеры являются лучшими в этом сценарии. Как видно из названия, конвертер преобразует тип. В этом случае вы хотите конвертировать in t в Char, поэтому конвертеры очень подходят. Для получения дополнительной информации: ConverterPerformance

В большинстве сценариев триггеры могут выполнять ту же работу, что и любой конвертер, но Converters может иметь пользовательскую / бизнес-логику.

Одно ограничение Triggers это сеттеры в вашем DataTriggers можете изменять только свойства ваших элементов пользовательского интерфейса; так что вы не можете обновить свой ViewModels свойство с триггерами, вот где Converters выиграть, запомнить ConvertBack метод.

Короче говоря Triggers может выполнять только OneWay операции, тогда как Converters может выполнять TwoWay операции

Другие вопросы по тегам