2011-01-24 15 views
8

मैं मैं इस सवाल पर बहुत कुछ पढ़ा MVVM पैटर्न, RelayCommand, आदि के साथ एक WPF आवेदन के विकास कर रहा हूँ, लेकिन मैं बाइंडिंग के रूप में स्पष्ट नहीं कर रहा हूँ:डब्ल्यूपीएफ और एमवीवीएम। घटनाक्रम

सभी मैं एक आकार स्थानांतरित कर रहा है क्या करना चाहते हैं, एक अंडाकार की तरह, उदाहरण के लिए, और डेटाबेस में डालने के लिए, अपनी अंतिम स्थिति को कैप्चर करें।

लेकिन मैं आदेशों (माउसलेट बुटनडाउन, माउस लेफ्ट बटन और माउसमोव) को आदेशों से बाध्य नहीं कर सकता। मैंने संलग्न व्यवहार के बारे में पढ़ा है, लेकिन स्थिति को पुनर्प्राप्त करने के लिए मुझे घटनाओं (माउसबटन एवेंट आर्ट्स और माउसइवेंट आर्ट्स) के तर्कों की आवश्यकता है।

समाधान?

उत्तर

2

यह सिल्वरलाइट लिए काम करता है तो यह WPF पर काम करना चाहिए

<i:Interaction.Triggers> 
<i:EventTrigger EventName="MouseLeftButtonDown"> 
<cmd:EventToCommand Command="{Binding MouseCommand, PassEventArgsToCommand="True", CommandParameter="{Binding}"/> 
</i:EventTrigger> 
</i:Interaction.Triggers> 
+1

आप यह उल्लेख करना भूल गए कि यह मिश्रण – TigOldBitties

8

जब एक MVVM चित्रमय आवेदन लेखन, यह सभी घटनाओं की जरूरत भेजने का प्रयास करने के लिए आकर्षक है (या कम से कम यह मामूली संशोधनों के साथ होना चाहिए पर) दृश्य-मॉडल पर। लेकिन एक कमांड में दृश्य-विशिष्ट माउस इवेंट तर्क को प्रोसेस करना एमवीवीएम सिद्धांतों और ढीले-युग्मन के लक्ष्य के विपरीत है।

इस समस्या को हल करने का तरीका ऑपरेशन को उस कार्य में अमूर्त करना है जो दृश्य निष्पादित कर सकता है और उसके बाद परिचालन और डेटा के माध्यम से दृश्य-मॉडल पर अपने परिणामों को संवाद करने के लिए। यदि आप इसका समर्थन करने के लिए कोड-बैक में कोड की एक छोटी राशि करना चाहते हैं, तो एमवीवीएम पुलिस नहीं आएगी और आपके बच्चों को नहीं ले जाएगी। लेकिन व्यवहार के साथ अंतःक्रियाशीलता जोड़ने का एक बेहतर तरीका है। व्यवहार कार्यक्षमता के पुन: प्रयोज्य टुकड़े हैं जिनके साथ कोई कोड-पीछे नहीं है जो एमवीवीएम पैटर्न और अनुप्रयोगों के साथ अच्छी तरह से काम करता है, जिन्हें अंतःक्रियाशीलता की आवश्यकता होती है जो अन्यथा आपके एक्सएएमएल में ईवेंट हैंडलर जोड़ने की आवश्यकता होती है।

अपने अन्तरक्रियाशीलता के साथ दृश्य से, दृश्य-मॉडल कर सकते हैं प्रदर्शन किया:

एक व्यवहार की एक पूरी उदाहरण ग्राफिकल वस्तुओं घसीट के लिए माउस घटनाओं का उपयोग करता है के लिए यहाँ मेरा उत्तर देखें डेटा और आज्ञाओं के साथ चिपके रहें।

+0

का उपयोग करता है, बहुत बहुत धन्यवाद, मुझे बस इतना ही चाहिए। अब मैं पैटर्न एमवीवीएम बेहतर समझता हूं। –

0

आप XCommand खुला स्रोत codeplex WPF विस्तार परियोजना यहाँ, xcommand.codeplex.com पा सकते हैं, यह आप किसी भी UI तत्व है कि WPF UIElement से विरासत को MouseMove, MouseLeftButtonDown की तरह किसी भी घटनाओं की कमान और CommandParameter बाध्य करने के लिए अनुमति देता है।

आप यहां कक्षा पुस्तकालयों के विंडोज स्टोर 8 एप्लिकेशन और विंडोज डेस्कटॉप एप्लिकेशन संस्करण पा सकते हैं। आप WPFXCommand चाहते हैं जो WPF डेस्कटॉप एप्लिकेशन से संबंधित है। यहां, यह कैसे काम करता है। अपनी इच्छा परियोजना के संदर्भ में WPFXCommand.dll जोड़ें।

नीचे के रूप में अपने XAML फाइल पर नाम स्थान जोड़ें:

xmlns:XCmd="clr-namespace:WPFXCommand;assembly=WPFXCommand" 

अब, आप कमान और CommandParameter बाध्य कर सकते हैं किसी भी UI तत्व पर किसी भी उपलब्ध घटनाओं के लिए WPF UIElement से के रूप में के वारिस नीचे:

<Grid> 
     <TextBlock Margin="20,30,20,0" VerticalAlignment="Top" Height="80" x:Name="XTextBlock" 
       Foreground="{Binding FgColor, Mode=TwoWay}" 
       XCmd:MouseMove.Command="{Binding TextBlockPointerMovedCommand}" 
       XCmd:MouseLeftButtonDown.Command="{Binding TextBlockPointerPressedCommand}" 
       XCmd:MouseLeave.Command="{Binding TextBlockPointerExitedCommand}"  
       Text="{Binding Description, Mode=TwoWay}"> 
     </TextBlock> 
     <Grid Grid.Column="1" Background="{Binding BgColor, Mode=TwoWay}" 
       XCmd:MouseMove.Command="{Binding GridPointerMovedCommand}" 
       XCmd:MouseMove.CommandParameter="{Binding ElementName=XTextBlock, Path=Text}" 
       XCmd:MouseLeftButtonDown.Command="{Binding GridPointerPressedCommand}" 
       XCmd:MouseLeftButtonDown.CommandParameter="{Binding ElementName=XTextBlock, Path=Text}" 
       > 
     </Grid> 
    </Grid> 

आशा है कि यह आपको ई से छुटकारा पाने में मदद करेगा पीछे आधारित कोड आधारित।

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