2011-10-24 11 views
15

व्यूमोडेल में दृश्य में एक WPF ईवेंट को बांधने का सबसे अच्छा तरीका क्या है?डब्ल्यूपीएफ घटना दृश्य से देखने के लिए बाध्यकारी?

मुझे अपने दृश्य में एक ड्रॉप इवेंट मिला लेकिन मैं इसे व्यूमोडेल के कारण बाध्यकारी में बदलना चाहता हूं। कई समाधान मिला लेकिन उनमें से कोई भी मैंने अपेक्षित नहीं किया।

देखें कोड:

<TextBox 
    AllowDrop="True" 
    PreviewDrop="email_Drop" /> 
+4

इमो एक viewmodel से कोई ईवेंट बाध्यकारी एक अच्छा विचार नहीं है। बेशक यह इस बात पर निर्भर करता है कि आप एमवीवीएम को आपके लिए कैसे काम करना चाहते हैं, लेकिन हम कड़ाई से घटनाओं को अलग करते हैं, जो यूई तर्क हैं, और कमांड जो व्यावसायिक तर्क हैं। बस इसे जोड़ना चाहता था :) अंत में यह इस बात पर निर्भर करता है कि आप कैसे और क्या हासिल करना चाहते हैं। – dowhilefor

+0

धन्यवाद, अच्छी टिप्पणी मैं इसे ध्यान में रखूंगा। अभी के लिए मैं बस फाइलों के पीछे कोड खाली होना चाहता हूँ। लेकिन मैंने जो कुछ भी पढ़ा है, उससे आप सही हैं;) – jefsmi

+0

@dowhilefor यह स्वयं ही एक उत्तर है - और एक अच्छा है। मेरा सुझाव है कि आप कुछ लिखो। :) – ANeves

उत्तर

37

एक तरह से MVVM और XAML में घटनाओं को संभालने के लिए ब्लेंड अन्तरक्रियाशीलता सुविधाओं का उपयोग करने के लिए है। इस नेमस्पेस में InvokeCommandAction और CallMethodAction क्लासेस शामिल हैं।

InvokeCommandAction आपको किसी भी ईवेंट को व्यू-मॉडल कमांड में बाध्य करने देता है जबकि CallMethodAction आपको किसी भी ईवेंट को व्यू-मॉडल विधि में बाध्य करने देता है।

उदाहरण के लिए यदि आप एक दृश्य मॉडल आदेश आप इस तरह करना होगा करने के लिए एक बटन के डबलक्लिक घटना बाध्य करने के लिए चाहते हैं:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 

तुम सब:

<Button> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="MouseDoubleClick"> 
      <i:InvokeCommandAction Command="{Binding Path=DoSomethingCommand}"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</Button> 

और यह नाम स्थान की घोषणा अपनी परियोजनाओं में इसका संदर्भ देने की आवश्यकता है अभिव्यक्ति मिश्रण या अभिव्यक्ति मिश्रण एसडीके स्थापित करना।

3

खैर एक तरह से करने के लिए एक आदेश में है कि घटना कन्वर्ट करने के लिए और फिर इसे घटना व्यवहार को परिभाषित करते हुए आदेश है, यानी प्रस्तोता को बाँध है।

इस देखें, WPF Event Binding to ViewModel (for non-Command classes)

+0

मुझे EventToCommand समाधान मिला लेकिन मैं इसका बड़ा प्रशंसक नहीं हूं इसलिए यह जानना चाहता था कि इसे हल करने के बेहतर तरीके हैं या नहीं;) – jefsmi

+1

:) यदि आप उपयुक्त हैं तो आप संलग्न संपत्ति समाधान का प्रयास कर सकते हैं – whoisthis

1
<Button MouseDoubleClick="{eb:EventBinding Command=DoSomethingCommand}"> 

</Button> 

कमान

{EB: EventBinding}

{EB: EventBinding कमान = commandname} (कमांड को खोजने के लिए सरल नामकरण पैटर्न)

CommandParameter

$ ई (EventAgrs)

$ इस या $ this.Property

स्ट्रिंग

https://github.com/JonghoL/EventBindingMarkup

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