2012-08-30 17 views
12

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

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

तो मूल रूप से। क्या कोई मुझे एक बटन काम करने के लिए बाध्य Icommand का सबसे सरल संस्करण दिखा सकता है?

उत्तर

21

अपने XAML में:

<Button Content="My Button" Command="{Binding MyViewModelCommand}" /> 

अपनी व्यू-मॉडल में:

public class MyViewModel 
{ 

    public MyViewModel() 
    { 
     MyViewModelCommand = new ActionCommand(DoSomething); 
    } 

    public ICommand MyViewModelCommand { get; private set; } 

    private void DoSomething() 
    { 
     // no, seriously, do something here 
    } 
} 

INotifyPropertyChanged और अन्य दृश्य-मॉडल pleasantries elided।
आपके दृश्य-मॉडल में कमांड को संरचित करने का एक वैकल्पिक तरीका इस उत्तर के नीचे दिखाया गया है।

अब, आपको ICommand के कार्यान्वयन की आवश्यकता होगी। मैं कुछ इस तरह सरल के साथ शुरू करने की सलाह देते हैं, और विस्तार या अन्य सुविधाओं को लागू/आदेशों के रूप में आवश्यक:

public class MyViewModel 
{ 
    private ICommand _myViewModelCommand; 
    public ICommand MyViewModelCommand 
    { 
     get 
     { 
      return _myViewModelCommand 
       ?? (_myViewModelCommand = new ActionCommand(() => 
       { 
        // your code here 
       })); 
     } 
    } 
} 
+0

धन्यवाद जे कि था:

public class ActionCommand : ICommand { private readonly Action _action; public ActionCommand(Action action) { _action = action; } public void Execute(object parameter) { _action(); } public bool CanExecute(object parameter) { return true; } public event EventHandler CanExecuteChanged; } 

यहाँ अपनी व्यू-मॉडल लेआउट का एक वैकल्पिक तरीका है वास्तव में मैं क्या देख रहा था :) विमान और सरल :) –

2

जेज़ जवाब देने के लिए जोड़ने के लिए:

मेरे सभी समय पसंदीदा पैटर्न और आचरण टीम @ Microsoft से DelegateCommand है। अधिक जानकारी के लिए this post देखें।