MVVM Light UniversalConverter bool to Visibility

时间:2012-07-26 11:19:58

标签: wpf mvvm-light

我正在尝试在绑定的布尔值上进行一对TextBlock切换(一个Visible,另一个Collapsed,反之亦然)。

我可以使用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设计窗口中引发异常:Unknown identifier 'Visible'

我也试过b=>b?Visibility.Visible:Visibility.Collapsed,这是UniversalConverter的Convert方法评论中的一个例子;抛出Unknown identifier 'Visibility'

如何添加UniversalConverter所需的引用?

2 个答案:

答案 0 :(得分:2)

老实说,我从未使用过优秀的MVVM Light工具包框架中的UniversalConverter类,因此我无法回答您的具体问题“如何使其工作”。

但是为了解决您的实际问题,您可以创建自己的BooleanToVisibilityConverter,允许反转true / false和Visible / Collapsed 之间的映射。有关示例,请参阅How do I invert BooleanToVisibilityConverter?

我个人真的会因为很多原因而避免使用UniversalConverter

  • 如您所知,未记录
  • 强制在XAML中编写编程逻辑,这不是XAML的主要目标......
  • ...强制编写无法调试的C#代码行(至少对于VS2010 + .Net 4),这意味着这个转换器是一种错误的方法恕我直言

答案 1 :(得分:0)

自2013年以来UniversalConverter似乎已被删除

http://blog.galasoft.ch/posts/2013/01/mvvm-light-v4-1-26-change-log/

  

BL0023.004,删除UniversalConverter