2014-07-07 40 views
1

我有一个带有TextBlock的窗口。此TextBlock必须显示的值“R”,如果绑定值是0或“M”,如果绑定值为1WPF XAML - DataTriggers或ValueConverters?最佳做法

我有两种可能性:

ValueConverter方法

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

valConverterIValueConverter类返回“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

可能重复http://stackoverflow.com/questions/19466354/wpf-triggers-vs-转换器) –

+0

可能重复的[我应该使用WPF转换器还是触发器?](http://stackoverflow.com/questions/11152313/should-i-use-wpf-converter-or-trigger/11156189#11156189) – akjoshi

回答

2

转换器在这种情况下是最好的。正如名字表示转换器转换类型。在这种情况下,你想将int转换为Char,所以转换器非常合适。更多信息:ConverterPerformance

4

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

Triggers的一个限制是DataTriggers中的Setters只能更改UI元素的属性;因此,您无法使用触发器更新您的ViewModels媒体资源,这就是Converters获胜的地方,请记住ConvertBack方法。

因此,在短期Triggers只能执行OneWay操作而Converters可以执行TwoWay操作

的[WPF触发VS转换器(
+1

如果你请复制早期问题的答案,然后请。提供原始问题的链接,对每个人都会更有帮助。 http://stackoverflow.com/a/11156189/45382 – akjoshi