2009-09-25 18 views
8

मैं सिल्वरलाइट में कीस्ट्रोक के आधार पर आदेशों को आग लगाने की कोशिश कर रहा हूं। जैसा कि मैं समझता हूं कि आप Silverlight में AccessKey या AcceleratorKey का उपयोग नहीं कर सकते हैं। यह भी लगता है कि उपयोगी सहायक संपत्ति हो सकती है इनपुट बाइंडिंग या तो काम नहीं करती है।एमवीवीएम में सिल्वरलाइट के लिए हॉटकी कमांड?

मैं अन्य स्थानों में तलाश शुरू कर दी। ऐसा लगता है कि प्रिज्म सिल्वरलाइट में काम करने वाले आदेश प्राप्त करने का तरीका था, इसलिए मैंने इसे चेक आउट किया। हालांकि उनके पास केवल एक क्लिक हैंडलर है, जो मुख्य आदेश स्थापित करने के लिए एक उपयोगी प्रारंभिक बिंदु भी नहीं है।

मैं सिर्फ प्रिज्म का कुछ हिस्सा गायब है? या एमवीवीएम सिल्वरलाइट के साथ हॉटकी को संभालने का एक अच्छा मानक तरीका है?

+0

मैं यह देखने के लिए बहुत उत्सुक हूं कि इसका कोई जवाब है या नहीं। – Jeremiah

उत्तर

9

ऐसा लगता है कि आप KeyUp/KeyPress/KeyDown ईवेंट को संभालने के "कोडेलेस" MVVMish तरीके की तलाश में हैं।

विकल्प # 1: प्रिज्म।
आपने इसका उल्लेख केवल क्लिक आदेश के साथ जहाजों का उल्लेख किया है। हालांकि, आप जो भी ईवेंट चाहें (जैसे कीप/कीडाउन/कीप्रेस) के लिए कमांड सक्षम करने के लिए अपने स्वयं के संलग्न डीपी जोड़ सकते हैं।

यदि आप उस कोरी पर नमूना ढूंढ रहे हैं तो ToggleButton के लिए एक अच्छा है। चेक/अनचेक किए गए ईवेंट।
http://www.85turns.com/2009/06/24/togglebutton-command-for-prism/

<ToggleButton x:Name="ToggleButton1" 
      customCommands:Checked.Command="{Binding CheckedCommand}" 
      customCommands:UnChecked.Command="{Binding UnCheckedCommand}" 
     Margin="8,8,0,8" Content="Check me" 
     /> 

इसके अलावा, एरिक Mork एक उत्कृष्ट वीडियो है कि आप आदेश और कैसे संलग्न डीपी एक कस्टम आदेश बनाने के लिए पर एक अच्छा सिंहावलोकन देता है। http://development-guides.silverbaylabs.org/Video/Prism-Commands

विकल्प # 2: मिश्रण ट्रिगर और व्यवहार है कि आप करने की कोशिश कर रहे हैं करने के लिए पर हाजिर हैं साथ
अभिव्यक्ति ब्लेंड एसडीके जहाजों से चलाता है।
Blend Examples एक EventTrigger साथ codeplex परियोजना जहाजों आप इस्तेमाल कर सकते हैं:

<i:EventTrigger EventName="Click"> 
     <si:InvokeDataCommand Command="{Binding ShoppingCart.CheckOutCommand}"/> 
</i:EventTrigger> 

या, आप कुंजी स्ट्रोक की घटनाओं के लिए अपने स्वयं के कस्टम उत्प्रेरक बना सकते हैं और वहाँ क्या जो कुछ भी आप चाहते हैं, हम कर सकते हैं। यहां एक नमूना है:
http://azurecoding.net/blogs/brownie/archive/2009/04/06/blend-behaviors-ftw.aspx

+0

की तुलना में सिल्वरलाइट की सीमाओं को देखता हूं तो मैं हमेशा आश्चर्यचकित हूं, मैं जस्टिन की दूसरी प्रतिक्रिया देता हूं। मैंने विकल्प # 2 का उपयोग करके एक कीडाउन/कीअप कमांड अटैचमेंट बनाया है और मैं अपने एसएल ऐप में पेजअप/पेजडाउन और अन्य हॉट कुंजियों को संभालता हूं। यह वास्तव में अच्छी तरह से काम करता है। मैं कमांड पैरामीटर के माध्यम से कुंजी कोड पास करता हूं, इसलिए मेरा आदेश मुख्य कोड को संभाल सकता है। इन संलग्न आदेशों का द्रव्यमान बनाना एक अच्छा विचार है। वे लिखने के लिए सरल हैं, और कहीं भी आपको उपयोग करने में आसान है। –

+0

विकल्प # 1 के लिए: प्रिज्म मॉडल ऐसी घटनाओं के लिए अच्छी तरह से काम करता है जिनके लिए कोई अतिरिक्त जानकारी की आवश्यकता नहीं होती है, लेकिन यदि आप उसी घटना की विविधताएं चाहते हैं, जैसे कि कीडाउन पर विभिन्न कुंजी। इसका कार्यान्वयन प्रति तत्व केवल एक संलग्न संपत्ति पर निर्भर करता है, लेकिन हॉटकी को संभालने के लिए आप एक ही तत्व पर एकाधिक संलग्न गुणों को चाहते हैं। संलग्न संपत्ति व्यवहार कार्यान्वयन इसकी अनुमति नहीं देता है। विकल्प # 2/ब्रायन: आदर्श रूप से आप कमांड कार्यान्वयन की बजाय दृश्य में हॉटकी को निर्दिष्ट नहीं करना चाहते हैं? – RandomEngy

+0

मुझे वास्तव में उस मिश्रण व्यवहार नमूना पसंद है। यह एक स्मार्ट लड़का है;) –

0

क्या आपका मतलब है की तरह Ctrl + V या इस तरह के मैं MSDN site पर निम्न उदाहरण देखा है।

void Canvas_KeyUp(object sender, KeyEventArgs e) 
{ 
    //check for the specific 'v' key, then check modifiers 
    if (e.Key==Key.V) { 
     if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) { 
     //specific Ctrl+V action here 
     } 
    } // else ignore the keystroke 
} 
+0

मैं एक एमवीवीएम कमांड पैटर्न की तलाश में हूं। मुझे पहले से ही पता है कि इसे कोडबींड में कैसे लगाया जाए। – RandomEngy

0

MVVM toolkit एक दिलचस्प CommandReference वर्ग है कि आप InputBindings बाध्य करने के लिए ViewModel आदेश की अनुमति देता है शामिल हैं। मुझे यकीन है कि यह सिल्वरलाइट लिए काम करता है नहीं कर रहा हूँ, लेकिन आप इसे आजमाइए कर सकते हैं ...

ठीक है, के रूप में RandomEngy ने बताया, वहाँ Silverlight में कोई InputBindings रहे हैं ...

हालांकि, मैं आपको लगता है संलग्न व्यवहार का उपयोग कर सकते हैं। यह ViewModel के कमांड को एक ईवेंट "बाध्य" करने का एक तरीका है। मार्लन ग्रीक a good implementation here

+1

मुझे विश्वास नहीं है कि सिल्वरलाइट में इनपुट बाइंडिंग है। – RandomEngy

+1

आप बिल्कुल सही हैं, मैं यह विवरण भूल गया था ...जब मैं WPF –