2012-07-26 73 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