我有IEnumerable<>中包含的对象列表。 我想根据此列表的计数设置控件的可见性。我试过了:
Visibility="{Binding MyList.Count>0?Collapsed:Visible, Mode=OneWay}"
但这不起作用。我尝试将MyList.Count绑定到文本块中的文本以确保计数值是正确的,并且确实如此。它似乎没有正确设置可见性。
答案 0 :(得分:30)
您不能在绑定中使用逻辑或代码表达式(它需要PropertyPath
)。使用converter或触发器,这就是我要做的事情:
<YourControl.Style>
<Style TargetType="YourControl">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding MyList.Count}" Value="0">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</YourControl.Style>
(如果您愿意,您当然可以将样式重构为resource。)
答案 1 :(得分:3)
有三种方式:
你总是可以使用Triggers方法,它始终是一个很好的方法。当您使用MVVM模式时,第三种方法很有用(也是最好的)(并且您不会限制自己在ViewModel中引用与UI相关的程序集) 我建议使用触发器,但是如果你不想让你的xaml变脏那么多的标记代码使用转换器。
答案 2 :(得分:0)
您应该使用转换器,它将Count属性转换为Visibility值,或者将新的“HasItems”布尔属性转换为Visibility值。我们使用一些名为boolToVisibilityConvert的东西来处理这样的工作。
如果您需要,我可以为您提供更准确的详细信息。