2009-10-09 11 views
5

के साथ कोई कोड नहीं है, मैं एमवीवीएम पैटर्न का उपयोग करके डब्ल्यूपीएफ फॉर्म में एक साधारण डेटा एंट्री ऐप बना रहा हूं। प्रत्येक प्रपत्र में एक प्रस्तुतकर्ता ऑब्जेक्ट होता है जो सभी डेटा आदि का खुलासा करता है। मैं संपादन/सहेजें/हटाएं बटन और मेनू विकल्पों को सक्षम और अक्षम करने के लिए WPF कमांड का उपयोग करना चाहता हूं।डब्ल्यूपीएफ कमांड -

मेरी समस्या यह है कि इस दृष्टिकोण के लिए मुझे कोड-बैक पर बहुत सारे कोड जोड़ने की आवश्यकता है। मैं अपनी प्रस्तुति परत को जितना संभव हो उतना पतला रखने की कोशिश कर रहा हूं, इसलिए मैं कोड कोड के बजाय इस कोड/तर्क को मेरे प्रस्तुतकर्ता (या व्यूमोडेल) कक्षा के अंदर था। क्या कोई कोड कोड के पीछे एक ही चीज़ को हासिल करने का तरीका सुझा सकता है?

मेरे XAML इस तरह एक सा दिखता है:

<Window.CommandBindings> 
    <CommandBinding 
     Command="ApplicationCommands.Save" 
     CanExecute="CommandBinding_CanExecute" 
     Executed="CommandBinding_Executed" 
    /> 
</Window.CommandBindings> 

और मेरे कोड-पीछे लग रहा है इस तरह एक सा:

private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e) 
{ 
    e.CanExecute = (
     _presenter.SelectedStore != null && 
     _presenter.SelectedStore.IsValid); 
} 

उत्तर

11

मॉडल-व्यू-ViewModel (MVVM) डिजाइन पैटर्न का लक्ष्य उस लक्ष्य को प्राप्त करने का लक्ष्य है, और जोश स्मिथ के excellent article बताते हैं कि इसे कैसे लागू किया जाए।

आदेशों के लिए आप आलेख में वर्णित RelayCommand कक्षा का उपयोग कर सकते हैं।

के बाद से आप पहले से ही एक प्रस्तोता वस्तु है, तो आप उस वर्ग एक ICommand संपत्ति है कि वांछित तर्क लागू करता है बेनकाब करने दे सकते हैं, और फिर उस आदेश को XAML बाँध। यह सब लेख में समझाया गया है।

+0

ग्रेट लिंक - चीयर्स! –

0

यदि आप विशेष रूप से XMML में अनुप्रयोग आदेशों में से एक में ViewModel में कमांड को बाध्य करने का प्रयास कर रहे हैं, तो आपको ऐसा करने के लिए बुनियादी ढांचा बनाना होगा। हालांकि मैं in this answer कर रहा हूं जो आपको ऐसा कुछ करने की अनुमति देता है:

<local:RoutedCommandHandlers.Commands> 
    <local:RoutedCommandHandler RoutedCommand="ApplicationCommands.Save" 
           Command="{Binding TheSaveCommand}" /> 
</local:RoutedCommandHandlers.Commands> 
संबंधित मुद्दे