2011-09-05 18 views
8

WPF को ItemsSource को किसी निजी संपत्ति से कैसे बांधें?एक निजी संपत्ति के लिए आइटम्ससोर्स को कैसे बाध्य करें

<ComboBox x:Name="xxx" ItemsSource="{Binding Items, Mode=OneWay}" 
      DisplayMemberPath="ItemName"/> 
public partial class ItemBuySellAddEdit : BasePage 
{ 
    private List<Item> Items { get; set; } 
} 

गई वस्तुओं की सूची है, जबकि प्रपत्र लोड भरे जाएंगे।

+0

बाइंडिंग के साथ सार्वजनिक/आंतरिक कार्य। – RainCast

उत्तर

20

WPF में डेटा बाइंडिंग केवल सार्वजनिक गुणों के साथ काम करता है।

MSDN:

गुण आप एक बाध्यकारी अपने वर्ग के सार्वजनिक गुण होना चाहिए के लिए के रूप में बाध्यकारी स्रोत गुण का उपयोग करें। स्पष्ट रूप से परिभाषित इंटरफेस गुण बाध्यकारी प्रयोजनों के लिए पहुँचा नहीं जा सकता, और न ही संरक्षित कर सकते हैं, , निजी आंतरिक, या आभासी गुण होते हैं कि कोई आधार कार्यान्वयन

+0

भले ही इसे सार्वजनिक करने के लिए यह काम न करे। :( – sameera

+1

उपयोग ObservableCollection सूची

2

यह संभव नहीं है, यदि आप चाहें, तो आप इस्तेमाल कर सकते हैं इसके बजाय internal

... और ObservableCollection<T> का उपयोग करें और भूल नहीं है देखने के DataContext स्थापित करने के लिए।

+6

मेरे अनुभव में करने के बजाय भी आंतरिक पहुंच XAML डेटा बाइंडिंग और केवल सार्वजनिक संपत्तियों के लिए बाध्य किया जा सकता है को तोड़ने के लिए पर्याप्त है। – Neutrino

1

आपको एक सापेक्ष स्रोत बाध्यकारी की आवश्यकता है, अभी आपका बाध्यकारी आपके ItemBuySellAddEdit (फ्रेमवर्क एलिमेंट) के डेटाकॉन्टेक्स्ट के लिए है, यह मेरा इंप्रेशन है, क्योंकि आप partial का उपयोग कर रहे हैं। यदि यह व्यूमोडेल आउटपुट विंडो की जांच करता है, और देखें कि आपके पास कोई बाध्यकारी त्रुटियां हैं या नहीं।

<ComboBox 
    x:Name="xxx" 
    ItemsSource="{Binding Items, 
     RelativeSource={RelativeSource AncestorType={x:Type ItemBuySellAddEdit}}, 
     Mode=OneWay}" 
    DisplayMemberPath="ItemName"/> 

लेकिन स्टीफन बाउर का उत्तर अभी भी लागू होता है।

इसके अलावा, अगर आप स्वचालित रूप से पता चलता है कि इस सूची में नए आइटम चाहते हैं को ध्यान में WaltiD से जवाब है।

3

यदि आप वाकई वास्तव में ऐसा करना चाहते हैं, तो आपको ICustomTypeDescriptor लागू करके एक कस्टम प्रकार डिस्क्रिप्टर प्रदान करना होगा - जो नियमित सार्वजनिक गुणों के साथ एक कस्टम PropertyDescriptor के माध्यम से अतिरिक्त संपत्ति प्रदान करता है। आप इस इंटरफ़ेस को स्वयं प्रकार पर या TypeDescriptionProvider के माध्यम से कार्यान्वित कर सकते हैं; उत्तरार्द्ध को प्राथमिकता दी जाती है, क्योंकि यह ITypedList कार्यान्वयन के साथ कस्टम सूची प्रदान करने की आवश्यकता के बिना, अधिक परिदृश्यों (खाली सूचियों जैसी चीज़ों) में काम करता है। यह बहुत काम का है, और वास्तव में चरम मामलों को छोड़कर इसके लायक नहीं है। लेकिन यह किया जा सकता है।

संबंधित मुद्दे