将控件的可见性绑定到'Count'IEnumerable的
本文关键字:IEnumerable Count 控件 可见性 绑定 | 更新日期: 2023-09-27 18:09:59
我有一个包含在IEnumerable<>中的对象列表。我想根据这个列表的计数来设置控件的可见性。我试过了:
Visibility="{Binding MyList.Count>0?Collapsed:Visible, Mode=OneWay}"
但这不起作用。我尝试绑定MyList。对文本块中的文本进行计数以确保计数值正确,事实确实如此。它似乎没有正确设置能见度。
不能在绑定中使用逻辑表达式或代码表达式(它需要一个PropertyPath
)。要么使用转换器,要么使用触发器,这就是我要做的:
<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>
(当然,如果您愿意,您可以将样式重构为资源)
有三种方法:
- 使用H.B.提到的触发器
- 通过在类中实现IValueConverter并将Binding的Converter属性设置为该类中IValueConverter的实例来使用转换器
- 在ViewModel中定义一个属性来直接返回可见性状态。
你总是可以使用触发器方法,它总是一个很好的方法。当您使用MVVM模式(并且您不限制自己在ViewModel中引用UI相关程序集)时,第三种方法是有用的(也是最好的)。我建议使用触发器,但如果你不想让你的xaml被那么多标记代码弄脏,请使用转换器。
您应该使用转换器,它将Count属性转换为可见性值,或者可能是一个新的"HasItems"布尔属性转换为可见性值。我们使用一些东西,例如,称为boolToVisibilityConvert,来处理这样的任务。
如果你需要的话,我可以给你更精确的细节。