鉴于此对象
class Contact
{
public IEnumerable<Person> People { get; }
public string PhoneNumber { get; }
}
class Person
{
public string MobileNumber { get; }
}
以下布局
<Contact>
<PhoneNumber/>
<SinglePerson.MobileNumber/>
<People>
<MobileNumber />
</People>
<Contact>
我想要做的是在只有一个人时隐藏People元素,而是显示SinglePerson.Mobile数字元素。
隐藏相当容易:
<Style.Triggers>
<DataTrigger Binding="{Binding Path=People.Count}" Value="1">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
显示稍微有些棘手:
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=People.Count}" Value="1">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
我无法解决的问题是将<SinglePerson.MobileNumber>
文本绑定到人员列表中的第一个人。我尝试了“{Binding People [0] .MobilePhone}”的变体,但这不起作用。
甚至可能吗?
答案 0 :(得分:2)
可能还有其他方法,但我过去通过创建一个值转换器(一个名为PersonIndexerConverter的类来实现IValueConverter)解决了这个问题。转换可以采用一个参数作为您的索引。将索引作为XAML中的parementer传递。绑定变得有点复杂,但是你得到你的索引。
答案 1 :(得分:1)
如果您只想获取集合中的FIRST项目,实际上要容易得多。如果引用所需的属性,wpf会自动选择集合中第一个元素的值:
<DataTrigger Binding="{Binding People/MobileNumber}" Value="">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
(来自IanG)