2009-08-26 51 views
1

鑑於此對象XAML綁定到索引的元素結合

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> 

我希望做的是隱藏在人們元素只有一個時人,並顯示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>文本結合第一人員列表中的人員。我已經試過「{結合人物[0] .MobilePhone}」的變種,但不起作用。

這有可能嗎?

回答

1

它實際上是容易得多,如果你只是想獲得一個集合中的第一項。如果引用所需的財產,WPF會自動選擇集合中的第一個元素的值:

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

(從IanG

2

可能有其他的方式,但我已經在過去通過創建一個值轉換器(一個名爲PersonIndexerConverter實現的IValueConverter類)解決了這個。轉換可以採用一個參數,這是您的索引。通過該指數作爲一個XAML parementer。的結合變得稍微複雜一些,但你得到你的索引。

+0

酷,工程確定對我來說,我做了一個FirstPersonMobileConverter(我可以已經決定在屬性名作爲參數來傳遞,這將是下一個版本)。 – Benjol 2009-08-26 10:30:45