2009-11-04 3 views
18

Compte tenu d'une instance de la classe ThisClassShouldBeTheDataContext comme DataContext pour la vueComment pouvez-vous lier une propriété indexée à un contrôle 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;} 
} 

Comment puis-je lier Contact["John"].PhoneNumber à une zone de texte?

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

Répondre

27

La notation indexeur est essentiellement le même que C#:

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

Voir Binding Declarations Overview > Binding Path Syntax dans MSDN pour plus d'informations.

Ce ne sera pas, bien sûr, le travail pour les types de données arbitraires ...

+19

Que faire si mon index n'est pas une chaîne, ou il est d'une autre propriété de la vm, disent {Binding Contacts [ThisIsAnotherPropertyFromTheVm] .PhoneNumber } Comment puis je faire ça? – Lance

+2

Cela fait des années que j'ai posé la question dans le commentaire quand j'ai commencé à utiliser WPF, maintenant je vais y répondre. Je pense que la meilleure façon de le faire est de ne pas lier à une propriété indexée. Exposer juste une autre propriété où le getter retournera la propriété indexée (c'est-à-dire les contacts [ThisIsAnotherPropertyFromTheVm] .PhoneNumber) – Lance

+0

Le lien est cassé –

Questions connexes