【问题标题】:WPF XAML - DataTriggers or ValueConverters? Best practiceWPF XAML - DataTriggers 或 ValueConverters?最佳实践
【发布时间】:2014-08-27 18:42:43
【问题描述】:

我有一个带有TextBlock 的窗口。如果绑定值为 0,则此 TextBlock 必须显示值“R”,如果绑定值为 1,则必须显示值“M”。

我有两种可能:

ValueConverter 方法

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

其中valConverter 是一个IValueConverter 类,如果值分别为0 或1,则返回“M”或“R”。

[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>

您认为最好的方法是什么?

【问题讨论】:

标签: c# wpf xaml datatrigger valueconverter


【解决方案1】:

在这种情况下转换器是最好的。顾名思义,转换器转换类型。在这种情况下,您想将 int 转换为 Char,因此转换器非常适合。欲了解更多信息:ConverterPerformance

【讨论】:

    【解决方案2】:

    在大多数情况下,触发器可以执行与任何转换器相同的工作,但Converters 可以具有自定义/业务逻辑。

    Triggers 的一个限制是 DataTriggers 中的 Setter 只能更改 UI 元素的属性;所以,你不能用触发器更新你的ViewModels 属性,这就是Converters 获胜的地方,记住ConvertBack 方法。

    所以简而言之Triggers 只能执行OneWay 操作,而Converters 可以执行TwoWay 操作

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-08
    • 2011-08-06
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多