XAML绑定到绑定属性中的索引元素

时间:2009-08-26 09:33:58

标签: wpf data-binding

鉴于此对象

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}”的变体,但这不起作用。

甚至可能吗?

2 个答案:

答案 0 :(得分:2)

可能还有其他方法,但我过去通过创建一个值转换器(一个名为PersonIndexerConverter的类来实现IValueConverter)解决了这个问题。转换可以采用一个参数作为您的索引。将索引作为XAML中的parementer传递。绑定变得有点复杂,但是你得到你的索引。

答案 1 :(得分:1)

如果您只想获取集合中的FIRST项目,实际上要容易得多。如果引用所需的属性,wpf会自动选择集合中第一个元素的值:

<DataTrigger Binding="{Binding People/MobileNumber}" Value="">
    <Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>

(来自IanG