2009-12-04 23 views
12

के रूप में ToString() को प्रदर्शित करता है Wpf कॉम्बो बॉक्स संपादन की अनुमति देता है, और यह ठीक है अगर आपके सभी कॉम्बो बॉक्स आइटम स्ट्रिंग हैं, या उनके लिए परिभाषित ToString() विधि है ।WPF IsEditable = ऑब्जेक्ट से भरा सही कॉम्बोबॉक्स चयनित आइटम

जब आप कोई आइटम चुनते हैं, तो इसे टेक्स्ट के रूप में प्रदर्शित किया जाता है, यह डेटा टेम्पलेट का उपयोग नहीं करता है, यह केवल चयनित आइटम पर ToString() को कॉल करता है।

मैं ड्रॉप डाउन स्वरूपित हैं कि मेरे आइटम टेम्पलेट का उपयोग कर, जब मैं किसी एक का चयन मैं यानी MyNamespace.MyObjectName

कुछ समाधान कर दिया गया है ऑब्जेक्ट का नाम मिलता है मेरी कॉम्बो में मदों की एक सूची प्राप्त

  • उपयोग ValuePath वस्तु पर एक संपत्ति करने के लिए बाध्य करने के लिए, लेकिन अगर आप अपने प्रदर्शन की आवश्यकता होती है इन, दुर्भाग्य से एक से अधिक हो सकता है।
  • लागू toString() अपने वस्तु

पर विधि वहाँ एक और तरीका है चारों ओर है?

+0

हाँ दूसरी विधि पूरी तरह से काम करती है। –

उत्तर

27

आप उल्टा है कि आप को परिभाषित करने और बिना किसी भी कोड-पीछे इस को मनचाहे ढंग बदलने अपने XAML में कर सकते हैं पूरी तरह से Xaml

<ComboBox IsTextSearchEnabled="True" IsEditable="True" 
     ItemsSource="{Binding MyObjectCollection}" 
     TextSearch.TextPath="MyObjectName"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding MyObjectName}" /> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

भीतर ऐसा कर सकते हैं। आप आइटम्ससोर्स को अपने ऑब्जेक्ट्स के संग्रह में बाध्य करते हैं, और उसके बाद आप उस पथ को सेट करते हैं जिस पर आपकी खोज को टेक्स्टशर्च .extPath पर आधारित किया जाता है। फिर, आपके भीतर कस्टम आइटम टेम्पलेट आप ऑब्जेक्ट की ToString विधि के बाहर किसी अन्य चीज़ पर टेक्स्टब्लॉक को बाध्य कर सकते हैं।

+0

जोड़ने के लिए भूल गए, यहां अपनी कुंजी अपना डेटा टेम्पलेट रखना है। TextSearch.TextPath संलग्न संपत्ति कॉम्बोबॉक्स शो के भीतर आपका टेक्स्टबॉक्स बनाता है जो भी आप चाहते हैं। –

+1

पूर्ण सोने। संलग्न गुण मुझे हर बार प्राप्त करते हैं, क्योंकि उनके बारे में अनजान रहना इतना आसान है। धन्यवाद। –

+0

* ओएमजी * काश मैं इसे एक से अधिक बार बढ़ा सकता हूं। मैं यह भी चाहता हूं कि जब मैं "डब्ल्यूपीएफ कॉम्बोबॉक्स चयनित वैल्यूपाथ टूस्ट्रिंग" की खोज करता हूं तो उम्मीद की जाती है - उम्मीद है कि उन्हें एक टिप्पणी में उल्लेख करने से कुछ अन्य गरीब साबुन भविष्य में इसे समझने की कोशिश कर रहे 2 घंटों तक अपनी पूंछ का पीछा नहीं करेंगे। एक बड़े ढांचे का उपयोग करने में आधा लड़ाई सीख रही है कि ढांचे को डिजाइन करने वाले लोगों की तरह कैसे सोचें (मान लीजिए कि आप केवल पूरे विशाल ढांचे को याद नहीं कर सकते हैं .-)) मैं निश्चित रूप से इस पर "गलत" " दिशा। –

3

आप "ऑब्जेक्ट" को स्ट्रिंग मान और पीछे परिवर्तित करने के लिए IValueConverter का उपयोग कर सकते हैं। विवरण के लिए IValueConverter लिंक में उदाहरण कोड देखें।

+0

उत्तर के लिए धन्यवाद, आदमी मैं बेवकूफ की तरह महसूस करता हूं, मुझे यह पता था। शुक्रवार को बीमार दोष :) –

+0

ive ने कन्वर्टर्स का इस्तेमाल कई बार किया था, आप इस कनवर्टर को कहां रखेंगे, आइटमसोर्स प्रॉपर्टी पर नहीं, Ive ने चयनित इटैम प्रॉपर्टी पर कोशिश की और कनवर्टर हिट हो गया, लेकिन जब मैं एक स्ट्रिंग लौटाता हूं तो मुझे अभी भी MyNamespace मिलता है। MyObjectName, क्या आपके पास है इससे पहले एक combobox के साथ कोशिश की? –

+0

लिंक में उदाहरण देखें। यह आपको एक combobox के साथ कनवर्टर का उपयोग करने के लिए कैसे दिखाता है (comboboxes आइटम टेम्पलेट के माध्यम से)। –

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