2009-11-04 20 views
18

में एक नियंत्रण के लिए एक इंडेक्स्ड संपत्ति बाध्य कर सकते हैं ThisClassShouldBeTheDataContext देखने के लिए DataContextकैसे आप वर्ग का एक उदाहरण को देखते हुए 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;} 
} 

कैसे मैं एक पाठ बॉक्स को Contact["John"].PhoneNumber बाध्य कर सकते हैं के रूप में?

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

उत्तर

27

इंडेक्सर अंकन मूल रूप से सी # रूप में ही है:

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

अधिक जानकारी के लिए MSDN में Binding Declarations Overview > Binding Path Syntax देखें।

यह न जाहिर है, मनमाने ढंग से डेटा प्रकार के लिए काम करते ...

+19

क्या होगा अगर मेरा सूचकांक एक स्ट्रिंग नहीं है, या यह वीएम से दूसरे की संपत्ति से है, का कहना है कि {बाध्यकारी होगा संपर्क [ThisIsAnotherPropertyFromTheVm] .PhoneNumber }। मैं उसे कैसे कर सकता हूँ? – Lance

+2

यह वर्षों से हुआ है जब मैंने टिप्पणी में सवाल पूछा था जब मैं डब्ल्यूपीएफ का उपयोग करना शुरू कर रहा था, अब मैं इसका जवाब दूंगा। मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका एक अनुक्रमित संपत्ति से बंधना नहीं है। बस एक और संपत्ति का पर्दाफाश करें जहां गेटर अनुक्रमित संपत्ति वापस करेगा (यानी संपर्क [यह आईएसएथप्रॉपर्टी फ्रॉमथीवीएम] .PhoneNumber) – Lance

+0

लिंक टूटा हुआ है –