我有一个包含在IEnumerable<>中的对象列表。 我想根据这个列表的数量来设置一个控件的可见性。我已经尝试过:
Visibility="{Binding MyList.Count>0?Collapsed:Visible, Mode=OneWay}"
但这不起作用。我试图将MyList.Count绑定到文本块中的文本,以确保计数值正确,它确实是正确的。它只是似乎不能正确设置可见性。
我有一个包含在IEnumerable<>中的对象列表。 我想根据这个列表的数量来设置一个控件的可见性。我已经尝试过:
Visibility="{Binding MyList.Count>0?Collapsed:Visible, Mode=OneWay}"
但这不起作用。我试图将MyList.Count绑定到文本块中的文本,以确保计数值正确,它确实是正确的。它只是似乎不能正确设置可见性。
你不能在绑定中使用逻辑或代码表达式(它期望一个 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>
(如果你愿意,当然可以将样式重构为资源。)
Count
必须是一个依赖属性(通常仅用于UI元素),或者列表类必须实现INotifyPropertyChanged
。如果你使用ObservableCollection
,那应该可以工作。 - H.B.List<>
。我将尝试使用 ObservableCollection
。 - Emanuele Benedetti你应该使用一个转换器,将Count属性转化为Visibility值,或者可以创建一个新的“HasItems”布尔属性来转换成Visibility值。我们通常使用一个叫做boolToVisibilityConvert的东西来处理这种工作。
如果需要更精确的细节信息,我可以给你提供。