2010-10-26 17 views
5

हाय सभी
मेरे पास एक combobox है जो तत्वों की सूची में डेटाबेस है। लेकिन तत्वों की उस सूची के अलावा, मैं एक और वस्तु चाहता हूं। इस आइटम को 'नया ...'
प्रदर्शित करना चाहिए विचार यह है कि यदि वे सामान्य तत्वों में से एक का चयन करते हैं, तो यह उस तत्व से संबंधित कुछ क्रियाएं करता है। यदि वे 'नया' तत्व चुनते हैं, तो यह उन्हें एक स्क्रीन पर ले जाएगा जहां वे एक नया आइटम बना सकते हैं।
समस्या, जब आप कुछ DataBind आप इसे करने के एक और आइटम जोड़ने का विकल्प मिलता है न है, और तत्वों की सूची में एक डमी आइटम को जोड़ने का कोई सवाल नहीं है ...डाटाबेस डब्ल्यूपीएफ कॉम्बोबॉक्स 'नई ...' आइटम

इस बनाने का अवसर है कॉम्बोबॉक्स पर आधारित एक नया नियंत्रण जिसमें 'डिफॉल्ट एलिमेंट' संपत्ति है? (सभी संबंधित टेम्पलेटिंग और कमांड बाइंडिंग इत्यादि के साथ)

उत्तर

5

ऐसा करने के लिए मैंने पहले सामान्य प्रकार के लिए एक डमी रैपर क्लास बनाया है, जिससे आप अधिकतर सही मान वाले एक सूची से जुड़ सकते हैं और आपका "नया। .. "एक, उदाहरण के लिए

public class DisplayClass 
{ 
    public DisplayClass(ModelClass mc) 
    { 
     this.mc = mc; 
    } 

    public string Name 
    { 
     get { return this.mc != null ? this.mc.Name : "New..."; } 
    } 

    public bool IsDummy 
    { 
     return this.mc == null; 
    } 

    public ModelClass Model 
    { 
     return this.mc; 
    } 
} 

तब आप अपने डेटा संदर्भ (ViewModel) में इन का एक संग्रह की मेजबानी, और चयन उचित रूप से IsDummy के आधार पर संभाल कर सकते हैं। यह इस कार्यक्षमता के साथ नियंत्रण के रूप में स्वचालित नहीं है, लेकिन यह बहुत आसान है और संभवतः आसानी से सामान्य और पुन: प्रयोज्य बनाया जा सकता है।

+0

यह इसकी मुश्किल मेरी मानदंडों को पूरा करने के बाद से ... तुम्हारा और कुलपति जवाब मूलतः एक ही हैं लगता है, लेकिन मैं इस एक बार ले लेंगे चूंकि इसमें एक उदाहरण है – TerrorAustralis

+0

कोई चिंता नहीं, आपको यह देखने में खुशी हुई कि आपको –

2

ध्यान रखें कि आप जो बाध्य करते हैं वह यूआई उन्मुख संग्रह है जो व्यवसाय या डेटा इकाइयों से अलग हो सकता है।

यदि मैं आप थे, तो मैं बाध्य संग्रह की पहली स्थिति में एक 'नई' इकाई डालूंगा और जब उपयोगकर्ता इसे चुनता हूं तो उपयुक्त कार्रवाई को ट्रिगर करने के लिए इसे मेरे व्यूमोडेल में ढूंढें।

3

आइटम्ससोर्स प्रॉपर्टी को कंपोजिट कोलेक्शन में नए आइटम और बाध्य संग्रह के साथ सेट करें, फिर चयनित इंडेक्स या कुछ इसी तरह के आधार पर उस आइटम का चयन करें।

उदाहरण कोड:

CompositeCollection के लिए
<ComboBox> 
    <ComboBox.ItemsSource> 
     <CompositeCollection> 
     <ComboBoxItem>Add New Item...</ComboBoxItem> 
     <CollectionContainer Collection="{Binding Source={StaticResource CollectionSource}}"/> 
     </CompositeCollection> 
    </ComboBox.ItemsSource> 
</ComboBox> 

MSDN: http://msdn.microsoft.com/en-us/library/system.windows.data.compositecollection(v=vs.110).aspx

+0

शानदार उत्तर मिला। धन्यवाद। –

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