2009-06-04 13 views
27

शुद्ध एमवीवीएम करने वाले लोगों के लिए, आप कोड को वापस किए बिना कॉम्बोबॉक्स चयन चेंज किए गए ईवेंट को कैसे प्रबंधित करते हैं?एमवीवीएम में चेंज किए गए कॉम्बोबॉक्स चयन को आप कैसे संभालेंगे?

मैंने उदाहरण की कोशिश की AttachedBehaviors लेकिन घटना = "SelectedChanged" समर्थित नहीं है:

<ComboBox> 
    <ComboBoxItem Content="Test1"> 
     <c:CommandBehaviorCollection.Behaviors> 
      <c:BehaviorBinding Event="SelectionChanged" 
           Command="{Binding SelectedChanged}" 
           CommandParameter="MainBorder123"/> 
     </c:CommandBehaviorCollection.Behaviors> 
    </ComboBoxItem> 
    <ComboBoxItem Content="Test2"/> 
    <ComboBoxItem Content="Test3"/> 
</ComboBox> 

उत्तर

3

आप इस तरह के

तो "सक्षम/अक्षम, या दिखाई/अदृश्य" के रूप में एक डेटा ट्रिगर का प्रयोग करेंगे एक अलग यूआई तत्व पर घटना ट्रिगर करना आप चयनित तत्व को अन्य यूआई तत्वों में ऑब्जेक्ट डेटा दिखाना चाहते हैं, तो आप डेटा बाइंडिंग का उपयोग करेंगे और यूआई डेटा डिस्प्ले तत्वों के डेटाकॉन्टेक्स्ट को कॉम्बो बॉक्स में वर्तमान में चयनित आइटम से बाध्य करने के लिए सेट करेंगे।

+0

ठीक है, मैं ऐसा कर सकता हूं अगर मैं बस इतना करना चाहता हूं कि एक्सएएमएल बदल जाए, लेकिन अगर मैं उदा। कोड निष्पादित करने के लिए एक comboxbox का उपयोग करें जो कुछ ऐसा करता है जो XAML नहीं कर सकता है, उदा। एक नई संसाधन फ़ाइल लोड करें और इसे वर्तमान विंडो से संलग्न करें? या उदा। डेटाबेस में कुछ डेटा बदलें, आदि –

+0

फिर आप अपने दृश्य मॉडल को कॉम्बो बॉक्स चयन चेंज में बाध्यकारी उपयोग कर सकते हैं। मुझे यकीन नहीं है कि आप एक उदाहरण की तलाश करेंगे, लेकिन कार्ल शिफलेट और जोश स्मिथ एमवीवीएम के लिए जाने वाले दो मुख्य ब्लॉग हैं जो उनके ब्लॉग के लिंक नीचे दिए गए हैं। http://karlshifflett.wordpress.com/2009/06/03/troubleshooting-silverlight-3-broken-bindings/ http://joshsmithonwpf.wordpress.com/2009/05/20/device- विशिष्ट- इंटरैक्शन-लॉजिक-इन-एन-एमवीवीएम-एप्लिकेशन/ क्षमा करें मैं विनिर्देशों पर और अधिक मदद नहीं कर सकता, मैं स्वयं WPF और MVVM के लिए बिल्कुल नया हूं। – Peter

+0

ओह का उल्लेख करना भूल गया कि कार्ल शिफलेट बहुत सारे डब्ल्यूपीएफ लाइन ऑफ बिजनेस इवेंट्स कर रहा है, उनके लिए उनके ब्लॉग पर नजर डालें, उनमें कुछ उत्कृष्ट पावरपॉइंट उदाहरण और कोड नमूने भी शामिल हैं। – Peter

25

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

+0

मुझे लगता है कि इस तरह से सबसे अधिक समझ में आता है, और यह अब तक मेरे लिए अच्छा काम कर रहा है। इसे पोस्ट करने के लिए धन्यवाद। – Aphex

+3

मुझे यह करने के लिए एक अविश्वसनीय रूप से दर्दनाक तरीका लगता है। सरल अनुप्रयोगों के लिए, कमांड के बजाए ऐसा करना आसान है। लेकिन यह जल्दी से अनावश्यक हो जाता है। गुणों को डेटा नहीं रखना चाहिए, क्रियाएं नहीं करना चाहिए। यह एसिंक को तोड़ता है, और डीबग करना अधिक कठिन बनाता है क्योंकि विजुअल स्टूडियो डिफ़ॉल्ट रूप से संपत्ति सेटर्स/गेटर्स पर कदम उठाएगा। –

53

यह पोस्ट काफी पुराना है, लेकिन चूंकि मुझे एक ही समस्या मिली है। यहां बताया गया है कि मैंने इसे कैसे हल किया (फ्रेमवर्क 4.0 का उपयोग करके): विचार System.Windows.Interactivity का उपयोग करना है।

XAML में:

<ComboBox ItemsSource="{Binding Items}"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="SelectionChanged"> 
      <i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</ComboBox> 

तो फिर तुम सिर्फ अपने viewmodel में SelectionChangedCommand को लागू करने की जरूरत है।

+0

यदि आपको 'कमांड' की आवश्यकता नहीं है, तो 'CallMethodAction' भी है, हालांकि इसे' Microsoft.Expression.Interactions.dll' – markmnl

+1

पर रेफरी जोड़ने की आवश्यकता होती है और आप 'चयनित इटैम' या 'चयनित वैल्यू' को ' कॉम्बोबॉक्स 'इसे बिना नाम दिए? – Maslow

+0

@ मास्लो या किसी और को चयनित आइटम को पैरामीटर के रूप में पास करने की तलाश में है: बाध्यकारी का उपयोग करें, [यहां] देखें (https://stackoverflow.com/a/34668511/63209)। मेरे मामले में, मैंने 'कॉम्बोबॉक्स' नाम दिया, उदाहरण के लिए, "माईकंबो", और फिर बाध्यकारी एक सरल '{बाध्यकारी तत्व नाम = MyCombo, पथ = चयनित Item} 'था। – Paul

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