将控件的可见性绑定到IEnumerable的“Count”

我有一个包含在IEnumerable 中的对象列表。 我想根据此列表的计数设置控件的可见性。 我试过了:

Visibility="{Binding MyList.Count>0?Collapsed:Visible, Mode=OneWay}" 

但这不起作用。 我尝试将MyList.Count绑定到文本块中的文本以确保计数值是正确的,并且确实如此。 它似乎没有正确设置可见性。

您不能在绑定中使用逻辑或代码表达式(它需要PropertyPath )。 使用转换器或触发器,这是我会做的:

    

(如果您愿意,您当然可以将样式重构为资源 。)

有三种方式:

  1. 使用HB提到的触发器
  2. 通过在类中实现IValueConverter并将Binding的Converter属性设置为该类中的IValueConverter实例来使用转换器
  3. 在ViewModel中定义属性以直接返回Visibility状态。

你总是可以使用Triggers方法,它总是一个很好的方法。 当您使用MVVM模式时,第三种方法很有用(也是最好的)(并且您不会限制自己在ViewModel中引用与UI相关的程序集)我建议使用触发器,但是如果你不想让你的xaml变脏那么多标记代码使用转换器。

您应该使用转换器,它将Count属性转换为Visibility值,或者可能将新的“HasItems”布尔属性转换为Visibility值。 我们使用一些名为boolToVisibilityConvert的东西来处理这样的工作。

如果您需要,我可以给您更准确的细节。