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
операции