2009-11-04 17 views
18

bir denetime bir Endeksli özelliği bağlayabilirsiniz ThisClassShouldBeTheDataContext görünümü için DataContextnasıl sınıfının bir örneği göz önüne alındığında 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;} 
} 

Nasıl bir metin kutusu için Contact["John"].PhoneNumber bağlayabilir olarak?

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

cevap

27

indeksleyicinin notasyonu temelde C# aynıdır:

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

fazla bilgi için MSDN Binding Declarations Overview > Binding Path Syntax bakın.

Bu, benim endeksi bir dize değil, ya da vm başka özelliğinden eğer

+19

, ne söylüyor keyfi veri türleri için tabii ki, iş ... {İletişim [ThisIsAnotherPropertyFromTheVm] Bağlama olmaz .PhoneNumber }. Bunu nasıl yapabilirim? – Lance

+2

WPF'yi kullanmaya başladığımdaki yorumu sorduğumdan beri yıllar geçti, şimdi cevaplayacağım. Bunu yapmanın en iyi yolunun endeksli bir mülke bağlanmaması olduğunu düşünüyorum. Sadece getterin indekslenmiş özelliği döndüreceği başka bir özelliği (ör. [ThisIsAnotherPropertyFromTheVm] .PhoneNumber) – Lance

+0

Bağlantı koptu. –

İlgili konular