2012-07-26 77 views
2

我試圖做一對TextBlock的切換(一個Visible,其他Collapsed,反之亦然)綁定布爾值。MVVM Light UniversalConverter布爾到可見性

我可以使用BooleanToVisibilityConverter作爲一個,但不能做!對於另一個,所以我試圖使用MVVM Light的UniversalConverter,這需要ConverterParameter中的lambda。

問題是,我找不到任何使用的例子,我的嘗試失敗。

我已經聲明它在XAML資源:

<Window.Resources> 
    <ex:UniversalConverter x:Key="UniversalConverter" /> 
</Window.Resources> 

,然後添加這個到TextBlock

<TextBlock Visibility="{Binding Path=ShowA, Converter={StaticResource universalConverter}, ConverterParameter='b=>b?Visible:Collapsed'}">A</TextBlock> 
<TextBlock Visibility="{Binding Path=ShowA, Converter={StaticResource universalConverter}, ConverterParameter='b=>b?Collapsed:Visible'}">B</TextBlock> 

這全中,XAML設計窗口的異常:。

我也試過b=>b?Visibility.Visible:Visibility.Collapsed這是UniversalConverter的Convert方法評論中的一個例子;投擲Unknown identifier 'Visibility'

如何將需要的參考添加到UniversalConverter

回答

2

老實說,我從未使用過MVVM Light工具箱框架中的UniversalConverter類,所以我無法回答你的具體問題「如何使它工作」。

但爲了解決你的實際問題,您可以創建自己的BooleanToVisibilityConverter允許反轉之間的映射真/假和可見光/摺疊。示例請參閱How do I invert BooleanToVisibilityConverter?

個人而言,我真的會避免使用UniversalConverter的原因有很多:

  • 無證因爲你現在知道
  • 力量寫在XAML,這不是XAML的首要目標編程邏輯。 ..
  • ...力寫的代碼C#線不能被調試(至少對於VS2010 +淨4),這意味着該轉換器是一個錯誤的方法IMHO
+1

我不得不承認,我不同意肯。 UniversalConverter是我嘗試玩的東西,但我必須承認我從不使用它。認真考慮棄用它並最終將其從MVVM Light中刪除。 – LBugnion 2012-07-26 13:01:07

+0

好吧,如果洛朗「不同意」,那麼肯肯定是對的。我想我想使用UniversalConverter,因爲它看起來像是一個快速勝出(_marginally_比寫我自己的特定轉換器更快)... – PeteB 2012-07-27 10:38:48