2012-06-22 34 views
8

我在想如何決定何時使用converters以及何時使用triggers。 我更喜歡在GUI上使用觸發器(比如顯示/隱藏控件,改變它們的外觀等)。我應該使用WPF轉換器還是觸發器?

前一段時間我用於此目的的BooleanToVisibilityConverter,但現在,我不,我不連接到visibility所有的東西使用觸發器,我甚至開始思考「什麼是創造的目的需要它MS團隊的BooleanToVisibilityConverter?「。通常,當可能的時候我嘗試使用聲明的方式來編寫代碼 - 在本例中是XAML。

您對此有何評論?

+0

觸發器用於單個值檢查,其中轉換器用於複雜和不同類型的值轉換。 – JSJ

+0

類似的問題暗示轉換器的性能成本 - http://stackoverflow.com/questions/5508159/datatrigger-vs-databinding-with-converter-performance-wise – akjoshi

回答

13

我同意你的看法,我也嘗試在XAML中使用聲明性代碼,並且更喜歡Triggers而不是Converters

在大多數場景中,觸發器可以執行與任何轉換器相同的工作,但Converters可以提供自定義/業務邏輯,如pchajer所述。

Triggers一個限制是塞特斯在DataTriggers只能改變你的UI元素的性能;所以,你不能用觸發器更新你的ViewModels屬性,那就是Converters贏了,記得ConvertBack方法。

所以,您可以將虛擬機性能與使用BooleanToVisibilityConverter和控制Visibility綁定,即使你控制visibility被一些其他意味着你的虛擬財產將得到更新改變; 通常不需要這就是爲什麼BooleanToVisibilityConverter被觸發器取代的原因。

因此,在短期 -

Triggers只能執行OneWay操作而Converters可以執行TwoWay操作

+1

它*有趣*這個答案是如何幾乎完全相同[這其他](http://stackoverflow.com/a/19474466/540776) – superjos

+0

@superjos我會說'如何其他答案几乎完全相同,這一個':D感謝指出,讓我微笑:) – akjoshi

+1

是的,留在這個問題上,我只是複製粘貼我的評論在這裏和那裏:) – superjos

1

您可以通過觸發或轉換器,但是從下面可能我的選擇實現的功能可以同時服用

  1. 確定。如果您使用的開發TDD方式,然後去轉換器,你可以寫測試用例可以考慮。
  2. 如果有任何業務邏輯更好的正確的代碼在轉換器和sometiems不能通過觸發實現。
1

除了說了些什麼上面我只能加:

  • 觸發器有時需要重複的東西,例如當您有多個觸發器屬性時,您需要指定每個組合的每個屬性
  • 有時您需要將代碼正確地從A類轉換爲B類,然後您必須使用轉換器。如果已經從VM公開了值/屬性,則可以將其用於觸發器,因此觸發器很好。
2

在我看來,你是從下往上看,你只需要看看自上而下。

觸發器 - 當規定的條件得到滿足爲「觸發」兩種不兼容的類型之間的執行

變換器 - 轉換。

爲什麼我們需要一個布爾型數據類型,當我們可以用intergers做同樣的功能?

0

您應該始終在DomainModel對象中或至少在ViewModel對象中執行與業務相關的操作。 在轉換器中進行一些業務工作並不是一個好的選擇,因爲轉換器旨在將值從一種類型轉換爲另一種類型。

+0

迪達你看到我的問題?我明確寫道:「對於GUI上的操作(如顯示/隱藏控件,改變它們的外觀等)」。我知道必須在DomainModel對象上控制與業務相關的選項。 –

相關問題