2011-05-23 15 views
29

हाय मैंने हाल ही में डब्ल्यूपीएफ में देखा है और घटनाक्रम और कमांड के बारे में सीखना शुरू कर दिया है। मैं आमतौर पर बटन क्लिक पर कमांड का उपयोग करता हूं जो मेरे "दृश्य मॉडल" में चलाने के लिए एक विधि का कारण बनता है।WPF में कमांड पर ईवेंट का उपयोग कब करें?

क्या बटन को किसी भी अन्य घटनाओं जैसे माउसओवर ईवेंट के माध्यम से प्रवृत्तियों के उपयोग के माध्यम से प्रतिक्रिया करना संभव है? या इस मामले में डब्ल्यूपीएफ घटनाओं का इस्तेमाल किया जाएगा?

यदि डब्ल्यूपीएफ घटनाओं का उपयोग किया जाना है, तो क्या ईवेंट हैंडलर कार्यान्वयन को चिंताओं को अलग रखने के लिए केवल व्यू मॉडल में एक विधि को कॉल करना चाहिए?

+0

यदि आप पहले से नहीं हैं, तो मैं अत्यधिक उत्कृष्ट MIX11 गहरे गोताखोर एमवीवीएम प्रसारण सहित लॉरेन बंगियन के मिक्स और टेकडे वीडियो स्ट्रीम का सुझाव देता हूं जिसमें इनमें से कई एमवीवीएम एज केस शामिल हैं। – Firoso

उत्तर

13

यह एक उचित सवाल है, और यह एक सामान्य है, लेकिन एमवीवीएम आर्किटेक्चर क्षेत्र के भीतर अभी भी "हल" (बहस) समस्या है। यदि आप एमवीवीएम फ्रेमवर्क का उपयोग कर रहे हैं, तो आपको EventToCommand व्यवहार के समान कुछ मिल सकता है, here एमवीवीएम लाइट टूलकिट का नमूना है।

<Rectangle Fill="White" 
     Stroke="Black" 
     Width="200" 
     Height="100"> 
<i:Interaction.Triggers> 
    <i:EventTrigger EventName="MouseEnter"> 
     <cmd:EventToCommand Command="{Binding TestCommand, 
             Mode=OneWay}" 
      CommandParameter="{Binding Text, 
           ElementName=MyTextBox, 
           Mode=OneWay}" 
      MustToggleIsEnabledValue="True" /> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 
</Rectangle> 

अपडेट::

वहाँ दो अन्य "उचित" इस समस्या का समाधान कर रहे हैं:

संक्षेप में, यह तुम इतनी तरह से बाध्यकारी एक कमांड को एक घटना को मैप करने के लिए अनुमति देता है

अब अब माना जाता है कि विरासत "अटैचमेंट कमांडरवियर" एक्सटेंशन here.

दूसरा थोड़ा परेशान है, लेकिन व्यावहारिक है।

  1. कब्जा एन विशुद्ध रूप से ध्यान में रखते हुए घटना के माध्यम से एक आदेश।
  2. क्वेरी नियंत्रण के डेटा स्रोत चरण
  3. ले लो एक स्ट्रिंग बाध्यकारी लक्ष्य पहचानकर्ता है कि आपके आदेश (शायद दृश्य पर एक स्थिरांक स्ट्रिंग का उपयोग)
  4. पर के माध्यम से प्रतिबिंब और पास दृश्य मॉडल अपने आदेश आह्वान को दर्शाता है कमांड तर्क में।

यह सकल दिखता है लेकिन मैं वास्तव में पारंपरिक कमांड बाइंडिंग का उपयोग करने से काफी तेज़ हूं। यह सुनिश्चित करने के लिए कि मुझे आईएल देखना होगा, और मुझे नहीं लगता कि यह इस मामले में महत्वपूर्ण है।

/अपडेट

मैं हालांकि ध्यान रखें कि यह हमेशा एक आदर्श स्थिति नहीं है चाहता हूँ।मैं अधिक बार नहीं की तुलना में, मैं EventToCommand उपयोग कर रहा हूँ एक डिजाइन मुद्दा कवर करने के लिए है कि पता चला है। उपयोगकर्ता-इंटरफ़ेस संबंधी व्यवहार को संभालने के लिए

  • उपयोग घटनाओं और कोड के पीछे: कृपया निम्नलिखित पर विचार करें।
  • आप प्रेरित घटना संपुटित करने bevahior बाध्य डेटा है कि उसके बाद दृश्य में दिखाई देता है स्थापित करने के लिए आदेशों का उपयोग करते मिल खासकर अगर अगर उचित आदेश बाइंडिंग है कि कस्टम नियंत्रण बनाने पर विचार करें। (यानी एक नियंत्रण या कुछ समान निकटता के आधार पर एक पारदर्शिता मूल्य निर्धारित करना)
  • EventToCommand को "कमांड-जैसी" घटनाओं को केवल (डबल क्लिक इत्यादि) को नियंत्रित करने के लिए उपयोग किया जाना चाहिए, प्रतिक्रियाशील ईवेंट (माउस-ओवर) नहीं। लेकिन वहाँ इस को रोकने कुछ नहीं है। लागू आप मनचाहे ढंग से।

सबसे महत्वपूर्ण बात शायद आपको याद है कि आप डेवलपर हैं है। अपने आप में दिशा-निर्देश की समस्याओं को हल नहीं है, लेकिन दिशा निर्देशों पर विचार करने के लिए एक समस्या का समाधान स्पष्ट कर सकते हैं।

6

इस पोस्ट पर एक नज़र लेने के लिए चाहते हो सकता है:

WPF Commands vs Events Advantages/Disadvantages

जो घटनाओं और आदेशों के विभिन्न उपयोगों के बारे में बात करती है।

अन्य घटनाओं के लिए आदेशों के रूप में, आपको EventToCommand जैसे MVVMLight Toolkit के हिस्से के रूप में कुछ देखना चाहिए, जो आपको किसी भी ईवेंट को आपके व्यूमोडेल में कमांड करने की अनुमति देता है। काफी उपयोगी, खासकर यदि आप पहले ही एमवीवीएम लाइट का उपयोग कर रहे हैं (जिसे मैं अत्यधिक अनुशंसा करता हूं)।

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