[संपादित करें] में बाध्यकारी के लिए आंतरिक नियंत्रण गुणों का खुलासा करना [संपादित करें]: मुझे पता चला कि यह स्वयं कैसे करें। मैंने उम्मीद में अपना समाधान पोस्ट किया कि यह किसी और को गुगलिंग के कुछ दिन बचाएगा। यदि आप एक डब्ल्यूपीएफ गुरु हैं, तो कृपया मेरा समाधान देखें और मुझे यह बताने दें कि ऐसा करने के लिए एक बेहतर/अधिक सुरुचिपूर्ण/अधिक कुशल तरीका है या नहीं। विशेष रूप से, मुझे यह जानने में दिलचस्पी है कि मुझे क्या पता नहीं है ... यह समाधान मुझे सड़क पर कैसे फेंकने वाला है? समस्या वास्तव में आंतरिक नियंत्रण गुणों को उजागर करने के लिए उबालती है।डब्ल्यूपीएफ
समस्या: मैं एक XML फ़ाइल के लिए WPF में डेटा-बाउंड जीयूआई स्वत: उत्पन्न करने के लिए कुछ कोड बना रहा हूं। मेरे पास एक xsd फ़ाइल है जो मुझे नोड प्रकारों आदि को निर्धारित करने में मदद कर सकती है। सरल कुंजी/मान तत्व आसान हैं।
जब मैं इस तत्व पार्स:
<Key>value</Key>
मैं एक नया 'KeyValueControl' बना सकते हैं और इस तत्व को DataContext
सेट कर सकते हैं। KeyValue को UserControl के रूप में परिभाषित किया गया है और इसमें कुछ सरल बाइंडिंग हैं। यह किसी भी साधारण XElement के लिए बहुत अच्छा काम करता है।
XAML इस पर नियंत्रण के अंदर इस तरह दिखता है:
<Label Content={Binding Path=Name} />
<TextBox Text={Binding Path=Value} />
परिणाम एक लाइन तत्व का नाम और मान है कि मैं संपादित कर सकते हैं के साथ एक पाठ बॉक्स के साथ एक लेबल किया है।
अब, ऐसे समय हैं जहां मुझे वास्तविक मूल्य के बजाय लुकअप मान प्रदर्शित करने की आवश्यकता है। मैं उपरोक्त KeyValueControl के समान 'KeyValueComboBox' बनाना चाहता हूं लेकिन आइटम्ससोर्स, डिस्प्ले और वैल्यू पथ निर्दिष्ट करने में सक्षम हूं (फ़ाइल में जानकारी के आधार पर)। 'नाम' और 'मान' बाइंडिंग KeyValueControl के समान होंगी।
मुझे नहीं पता कि एक मानक उपयोगकर्ता नियंत्रण इसे कैसे संभाल सकता है, या अगर मुझे चयनकर्ता से उत्तराधिकारी होना है।
नियंत्रण कुछ इस तरह दिखेगा में XAML:
<Label Content={Binding Path=Name} />
<ComboBox SelectedValue={Binding Path=Value}
ItemsSource={Binding [BOUND TO THE ItemsSource PROPERTY OF THIS CUSTOM CONTROL]
DisplayMemberPath={Binding [BOUND TO THE DisplayMemberPath OF THIS CUSTOM CONTROL]
SelectedValuePath={Binding [BOUND TO THE SelectedValuePath OF THIS CUSTOM CONTROL]/>
मेरी कोड, मैं तो कुछ इस तरह करना होगा में (यह सोचते हैं कि इस नोड एक 'बात' है और की एक सूची प्रदर्शित करने की जरूरत है उपयोगकर्ता तो हालात आईडी चुन सकते हैं:
var myBoundComboBox = new KeyValueComboBox();
myBoundComboBox.ItemsSource = getThingsList();
myBoundComboBox.DisplayMemberPath = "ThingName";
myBoundComboBox.ValueMemberPath = "ThingID"
myBoundComboBox.DataContext = thisXElement;
...
myStackPanel.Children.Add(myBoundComboBox)
तो मेरी प्रश्न हैं:
1) मैं नियंत्रण या चयनकर्ता से मेरी KeyValueComboBox वारिस चाहिए?
2) अगर मुझे नियंत्रण से उत्तराधिकारी होना चाहिए, तो मैं बाध्यकारी के लिए आंतरिक कॉम्बो बॉक्स के आइटमसोर्स, डिस्प्लेमेम्बरपाथ और वैल्यूमम्बरपैथ का खुलासा कैसे करूं?
3) अगर मुझे चयनकर्ता से उत्तराधिकारी की आवश्यकता है, तो क्या कोई इसका एक छोटा सा उदाहरण प्रदान कर सकता है कि मैं इसके साथ कैसे शुरुआत कर सकता हूं? दोबारा, मैं डब्ल्यूपीएफ के लिए नया हूं इसलिए एक अच्छा, सरल उदाहरण वास्तव में मदद करेगा अगर वह सड़क है जिसे मुझे लेने की ज़रूरत है।
मैं एक ऐसी ही तकनीक का उपयोग कर रहा हूँ, लेकिन मुसीबत जब में चल मेरी खुद को संबंधित रिश्तेदार स्रोत बाइंडिंग का उपयोग करने के लिए सेट अप किया जाता है। तो आपके मामले में यदि आपने कॉम्बोबॉक्स इटैम तत्वों को अपने आइटमसोर्स के रूप में संग्रहित किया है और किसी को ढूँढने वाले रिश्तेदार स्रोत का उपयोग करके लॉजिकल पेड़ को बाध्यकारी है, तो पता लगाने के लिए उस उत्तरदाता तत्व पर परिभाषित संपत्ति से जुड़ें, फिर बाध्यकारी विफल हो जाएगी। – jpierson
मैंने इसे एक बहुत ही समान मामले, अच्छे उत्तर के लिए उपयोग किया। मेरे आवेदन में मैं एक Combobox के चयनित इटैम के लिए बाध्यकारी था। यह केवल ध्यान दिया जाना चाहिए कि बाध्यकारी ठीक से काम करने के लिए, कुछ मामलों में बाध्यकारी मोड = twoway और UpdateSourceTrigger = PropertyChanged में जोड़ना आवश्यक है – Cocomico