2013-01-06 6 views
39

के बीच अंतर मैं कमांड पैटर्न के बारे में उलझन में हूं। आदेशों के बारे में कई अलग-अलग स्पष्टीकरण हैं। मैंने सोचा था कि नीचे दिया गया कोड प्रतिनिधिमंडल था, लेकिन रिलेकॉमैंड के बारे में पढ़ने के बाद, मुझे संदेह है।Delegatecommand, relaycommand और routedcommand

रिलेकॉमैंड, प्रतिनिधिमंडल और रूटर कमांड के बीच क्या अंतर है। क्या उन उदाहरणों में दिखाना संभव है जिनके पास मेरे पोस्ट कोड की प्रासंगिकता है?

class FindProductCommand : ICommand 
{ 
    ProductViewModel _avm; 

    public FindProductCommand(ProductViewModel avm) 
    { 
     _avm = avm; 
    } 

    public bool CanExecute(object parameter) 
    { 
     return _avm.CanFindProduct(); 
    } 

    public void Execute(object parameter) 
    { 
     _avm.FindProduct(); 
    } 

    public event EventHandler CanExecuteChanged 
    { 
     add { CommandManager.RequerySuggested += value; } 
     remove { CommandManager.RequerySuggested -= value; } 
    } 

} 
+0

आप एक गूगल खोज किया है .. उदाहरण यहां पर देखने के कोड कोशिश करते हैं और आपके पास क्या है पर लागू .. http://msdn.microsoft.com/en-us/library/ff654132.aspx http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.mvvm.relaycommand.aspx http://msdn.microsoft.com/en-us/library/ system.windows.input.routedcommand.aspx – MethodMan

+1

हां, इससे बहुत मदद नहीं मिली – Zaz

+0

मैं Google पर कमांड पैटर्न पर Google खोज करने का सुझाव दूंगा तो – MethodMan

उत्तर

43

आपका FindProductCommand वर्ग ICommand इंटरफ़ेस है, जो यह एक WPF command के रूप में इस्तेमाल किया जा सकता है इसका मतलब लागू करता है। यह न तो DelegateCommand और न ही RelayCommand है, न ही यह RoutedCommand है, जो ICommand इंटरफ़ेस के अन्य कार्यान्वयन हैं।


FindProductCommand बनाम DelegateCommand/RelayCommand

आम तौर पर, जब ICommand के एक कार्यान्वयन DelegateCommand या RelayCommand नाम पर है, इरादा आप एक वर्ग है कि ICommand इंटरफ़ेस लागू करता है लिखने के लिए की जरूरत नहीं है कि है, बल्कि, आप आवश्यक विधियों को DelegateCommand/RelayCommand कन्स्ट्रक्टर के पैरामीटर के रूप में पास करते हैं।

उदाहरण के लिए, अपने पूरे वर्ग के बजाय, आप लिख सकते हैं:

ProductViewModel _avm; 
var FindPoductCommand = new DelegateCommand<object>(
    (parameter) => _avm.FindProduct(), 
    (parameter) => _avm.CanFindProduct() 
); 

DelegateCommand/RelayCommand के कुछ कार्यान्वयन:

संबंधित:


FindProductCommand बनाम RoutedCommand

आपका FindProductCommand ट्रिगर होने पर FindProduct निष्पादित करेगा।

डब्ल्यूपीएफ का अंतर्निहित RoutedCommand कुछ और करता है: यह routed event उठाता है जिसे दृश्य पेड़ में अन्य वस्तुओं द्वारा नियंत्रित किया जा सकता है। इसका अर्थ है कि आप FindProduct निष्पादित करने के लिए उन अन्य ऑब्जेक्ट्स को बाध्यकारी आदेश संलग्न कर सकते हैं, जबकि RoutedCommand को विशेष रूप से कमांड को ट्रिगर करने वाले एक या अधिक ऑब्जेक्ट्स को जोड़ते हुए, उदा। एक बटन, एक मेनू आइटम, या एक संदर्भ मेनू आइटम।

कुछ अतः संबंधित उत्तर:

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