2009-11-04 11 views
18

Biorąc instancją klasy ThisClassShouldBeTheDataContext jako DataContext dla widokuJak można wiązać indeksowanego właściwość do kontroli w WPF

class ThisClassShouldBeTheDataContext 
{ 
    public Contacts Contacts {get;set;} 
} 

class Contacts 
{ 
    public IEnumerable<Person> Persons {get;set;} 
    public Person this[string Name] 
    { 
    get 
    { 
     var p = from i in Persons where i.Name = Name select i; 
     return p.First(); 
    }  
    } 
} 

class Person 
{ 
    public string Name {get;set;} 
    public string PhoneNumber {get;set;} 
} 

Jak mogę powiązać Contact["John"].PhoneNumber do pola tekstowego?

<TextBox Text="{Binding ?????}" /> 

Odpowiedz

27

Zapis indeksowania jest w zasadzie taka sama jak C#:

<TextBox Text="{Binding Contacts[John].PhoneNumber}" /> 

Zobacz Binding Declarations Overview > Binding Path Syntax w MSDN aby uzyskać więcej informacji.

To nie będzie, oczywiście, praca dla dowolnych typów danych ...

+19

Co jeśli indeks nie jest ciągiem znaków, czy to z innego mienia z VM, powiedzmy {Binding Kontakt [ThisIsAnotherPropertyFromTheVm] .PhoneNumber }. Jak mogę to zrobić? – Lance

+2

Minęły lata odkąd zadałem pytanie w komentarzu, kiedy zaczynałem używać WPF, teraz mam zamiar na nie odpowiedzieć. Myślę, że najlepszym sposobem, aby to zrobić, nie jest powiązanie z indeksowaną właściwością. Po prostu wyeksponuj inną właściwość, w której pobierający zwróci indeksowaną właściwość (tzn. Kontakty [ThisIsAnotherPropertyFromTheVm] .Numer telefonu) – Lance

+0

Łącze jest zepsute –

Powiązane problemy