2014-07-07 41 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