2009-11-04 11 views
18

Dada una instancia de la clase ThisClassShouldBeTheDataContext como el DataContext para la vista¿Cómo se puede obligar a una propiedad indexada a un control en 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;} 
} 

¿Cómo se puede unir I Contact["John"].PhoneNumber a un cuadro de texto?

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

Respuesta

27

La notación indexador es básicamente el mismo que C#:

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

Ver Binding Declarations Overview > Binding Path Syntax en MSDN para obtener más información.

Esto no es así, por supuesto, el trabajo para tipos de datos arbitrarios ...

+19

¿Qué pasa si mi índice no es una cadena, o es de otra propiedad de la VM, dicen {Binding Contactos [ThisIsAnotherPropertyFromTheVm] .PhoneNumber }. ¿Cómo puedo hacer eso? – Lance

+2

Han pasado años desde que hice la pregunta en el comentario cuando comencé a usar WPF, ahora voy a responderla. Creo que la mejor manera de hacerlo es no vincularse a una propiedad indexada. Simplemente exponer otra propiedad donde el getter devolverá la propiedad indexada (es decir, contactos [ThisIsAnotherPropertyFromTheVm] .PhoneNumber) – Lance

+0

El enlace está roto –

Cuestiones relacionadas