मेरे पास एक UserControl है जो एक विशिष्ट कमांड को संभालने के लिए कमांड बाइंडिंग संग्रह में कमांड बाइंडिंग जोड़ता है। बाद में मैं इस नियंत्रण का उपयोग एक खिड़की में करता हूं और अतिरिक्त व्यवहार जोड़ने के लिए उसी नियंत्रण में एक और बाध्यकारी जोड़ना चाहता हूं। समस्या यह है कि, जब मैं ऐसा करता हूं ऐसा लगता है कि जब मैं कमांड बाइंडिंग्स को एक नियंत्रण के संग्रह में एक और कमांड बाइंडिंग जोड़ता हूं, तो यह किसी भी बाध्यकारी को प्रतिस्थापित करता है जो पहले से ही उसी कमांड के लिए बनाया गया था। तो ऐसा लगता है कि एक नियंत्रण में प्रति नियंत्रण केवल एक कमांडबाइंडिंग हो सकती है, क्या यह सही है?क्या मेरे पास एक ही नियंत्रण के लिए एक ही कमांड के लिए एकाधिक कमांडबिंडिंग हो सकती है?
कृपया नीचे दिए गए कोड उदाहरण को देखें, जो एक ही सहेजें कमांड के लिए दो कमांडबिंडिंग सेट करने का प्रयास करता है।
<Window x:Class="MultipleCommandBindings.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.CommandBindings>
<CommandBinding Command="Save"
Executed="CommandBinding_Executed" />
<CommandBinding Command="Save"
Executed="CommandBinding_Executed" />
</Window.CommandBindings>
<Grid>
<Button Height="23"
HorizontalAlignment="Right"
Margin="0,0,25,88"
Name="button1"
VerticalAlignment="Bottom"
Width="75"
Command="Save">Button</Button>
</Grid>
मूल रूप से मैं या तो एक संकलन समय या क्रम अपवाद उम्मीद कर रहा था जब इस कोड को लिखा था लेकिन आश्चर्य है कि यह शिकायत नहीं किया। इसके बावजूद मैं निराश था क्योंकि मेरे कमांड बाइंडिंग_एक्सेटेड हैंडलर को केवल दो बार के बजाय बुलाया जाता है क्योंकि मैं उम्मीद कर रहा था।
अद्यतन: परीक्षण ऐसा लगता है कि मेरी दूसरी CommandBinding मेरा पहला एक अधिलेखित नहीं कर रहा है, लेकिन इसके बजाय ऐसा लगता है कि कर रहा हूँ, भले ही मैं सच करने के लिए अपने ईवेंट हैंडलर में रखरखाव वाले सेटिंग नहीं है कि पहली आदेश बाध्यकारी का एक सा होने के बाद कमांड निगलो। मुझे इस बात पर बहुत यकीन है कि मेरी समस्या का हल यह समझना है कि क्यों रूट किया गया आदेश पहले हैंडलर के पीछे प्रचार नहीं कर रहा है, भले ही हैंडल सही पर सेट न हो।
अद्यतन: मैं जानकारी जो सिर्फ WPF में कमान मार्ग के पीछे अजीब व्यवहार के कुछ की पुष्टि करता है की this great little tidbit पाया है।
अद्यतन: कैसे तथ्य ऐसा लगता है कि यह है कि वहाँ केवल आदेश के अनुसार एक भी प्रभावी CommandBinding हो सकता है हल करने के तरीके के बारे में एक विचार है कि ऐसा लगता है कि डिफ़ॉल्ट CommandBinding वर्ग निष्पादित और CanExecute घटनाओं निश्चित रूप से जो के रूप में उजागर करता है जैसे सभी घटनाओं में एकाधिक हैंडलर हो सकते हैं। तब विचार मानक कमांडबिंडिंग से कुछ और तरीका है। कमांडर को कमांडर जोड़ने के लिए विधि जोड़ें। हो सकता है कि यह नियंत्रण वर्ग पर एक विस्तार विधि के माध्यम से किया जा सके और एक कस्टम कंपोजिट कॉमांड बाइंडिंग क्लास के साथ संयोजन जो हमें एक मुख्य बाध्यकारी के भीतर कई बाइंडिंग को एकत्र करने की अनुमति देता है।
एकमात्र समाधान जिसे मैं सोच सकता हूं वह बटन के क्लिक ईवेंट की सदस्यता लेना है और फिर व्यू के डेटाकॉन्टेक्स्ट को इसके व्यूमोडेल के रूप में डालना है और मैन्युअल रूप से 2 कमांड निष्पादित करने के लिए उस var का उपयोग किया जाता है। इस विचार के लिए –