2009-08-18 11 views
55

मुझे अपने व्यूमोडेल में एक कमांड के लिए टेक्स्टब्लॉक (या संभावित रूप से एक छवि के साथ-साथ किसी भी तरह से, इसका उपयोगकर्ता नियंत्रण) की डबल क्लिक ईवेंट को बाध्य करने की आवश्यकता है।डब्ल्यूपीएफ में एक नियंत्रण के डबल क्लिक इवेंट हैंडलर में कमांड कैसे बाध्य करें?

टेक्स्टब्लॉक.इनपूट बाइंडिंग मेरे आदेशों, किसी भी मदद से सही ढंग से बाध्य प्रतीत नहीं होता है?

उत्तर

9

मार्लन ग्रीच के attached command behaviors आज़माएं।

+3

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

+2

मैं आपकी सामान्य भावना पर सहमत हूं - यह थोड़ा निराशाजनक है कि एमवीवीएम के लिए समर्थन WPF में अधिक बेक्ड नहीं है। अधिकांश अनुभवी डब्ल्यूपीएफ डेवलपर्स ने सहायक सहायक सामग्री की अपनी छोटी पुस्तकालय बनाई है। यदि आप सिल्वरलाइट कर रहे हैं तो कार्यक्षमता में अंतर भी अधिक है! –

1

मुझे भी ऐसा ही एक मुद्दा था जहां मुझे अपने व्यूमोडेल में एक कमांड के लिए एक सूचीदृश्य के MouseDoubleClick ईवेंट को बाध्य करने की आवश्यकता थी।

मैं जो सबसे सरल समाधान आया था वह एक डमी बटन डालने वाला है जिसमें वांछित कमांड बाध्यकारी है और माउसडब्लूक्लिक घटना के ईवेंटहैंडर में बटन के कमांड की निष्पादन विधि को कॉल करना है।

.xaml

<Button Visibility="Collapsed" Name="doubleClickButton" Command="{Binding Path=CommandShowCompanyCards}"></Button> 
       <ListView MouseDoubleClick="ListView_MouseDoubleClick" SelectedItem="{Binding Path=SelectedCompany, UpdateSourceTrigger=PropertyChanged}" BorderThickness="0" Margin="0,10,0,0" ItemsSource="{Binding Path=CompanyList, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" HorizontalContentAlignment="Stretch" > 

codebehind

 private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
      { 
       doubleClickButton.Command.Execute(null); 
      } 

यह स्पष्ट नहीं है, लेकिन यह वास्तव में आसान है और यह काम करता है।

208
<Button> 
<Button.InputBindings> 
<MouseBinding Gesture="LeftDoubleClick" Command="YourCommand" /> 
</Button.InputBindings> 
</Button> 

http://thejoyofcode.com/Invoking_a_Command_on_a_Double_Click_or_other_Mouse_Gesture.aspx

+29

+1 व्यक्तिगत रूप से, मुझे लगता है कि यह उत्तर सही के रूप में चिह्नित होना चाहिए। न केवल यह सबसे सरल है, लेकिन इसका उपयोग एमवीवीएम के साथ एक दृश्य मॉडल में 'आईसीओएमएंड' को बाध्य करके भी किया जा सकता है: '<माउस बाइंडिंग जेस्चर = "वामडब्लूक्लिक क्लिक करें" कमांड = "{बाइंडिंग योर कॉमांड}" /> ' – Sheridan

+0

नहीं काम करने (शायद कुछ वस्तुओं पर) जब तक आप इसे नहीं बनाते: http://www.telerik.com/community/forums/wpf/gridview/bind-double-click-to-a-viewmodel-command.aspx –

+3

अच्छा विकल्प गन्दा संलग्न व्यवहार :) –

6

यह MVVM तरीके से उपयोग करते हैं सरल है: मैं यहाँ MVVM लाइट जो सीखना आसान और मजबूत है उपयोग कर रहा हूँ।

निम्नलिखित लाइनों 1.put xmlns घोषणाओं:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
xmlns:GalaSoft_MvvmLight_Command="clr-namespace:GalaSoft.MvvmLight.Command; 
            assembly=GalaSoft.MvvmLight.Extras.WPF4" 

2.define अपने TextBlock सिर्फ इस तरह:

<textBlock text="Text with event"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="MouseDoubleClick"> 
     <GalaSoft_MvvmLight_Command:EventToCommand 
          Command="{Binding Edit_Command}"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</textBlock> 

3.Then अपने viewmodel में अपने आदेश कोड लिखने !!!

ViewModel1.cs

Public RelayCommand Edit_Command 
{ 
    get; 
    private set; 
} 

Public ViewModel1() 
{ 
    Edit_Command=new RelayCommand(()=>execute_me()); 
} 

public void execute_me() 
{ 
    //write your code here 
} 

मुझे आशा है कि आप के लिए काम करता है के रूप में मैं इसे रियल ईआरपी आवेदन में इस्तेमाल किया है

+1

इन 'गाला-सॉफ्ट-स्टफ' के साथ थोड़ा गड़बड़ है लेकिन इंटरैक्शन-दृष्टिकोण अच्छा है! –

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