WPF:

2010-06-17 11 views
8

के पीछे कोड में आदेशों के लिए बाध्यकारी मेरे पास एक WPF माइक्रोसॉफ्ट सर्फेस एप्लिकेशन है और मैं एमवीवीएम-पैटर्न का उपयोग कर रहा हूं।WPF:

मैं कुछ बटन के पीछे कोड में बनाए गए है और मैं उन्हें आदेशों बाध्य करने के लिए चाहते हैं, लेकिन मैं केवल जानते हैं कि कैसे है कि XAML

इस तरह काम करता है:

<Custom:SurfaceButton Command="{Binding SaveReservationCommandBinding, Mode=OneWay}"/> 

लेकिन मैं ऐसा नहीं कर सकता क्योंकि मेरे बटन XAML में मौजूद नहीं हैं, केवल कोड के पीछे ही।

तो कोड की तरह बाध्यकारी कमांड कैसे काम करेगा?

उत्तर

15

मान लें कि आप एक अपने SurfaceButton करने के लिए "SurfaceButton1" नाम है और आप आदेश का एक उदाहरण के लिए उपयोग किया है कि, आप निम्न कोड का उपयोग कर सकते हैं:

SurfaceButton1.Command = SaveReservationCommand; 
+1

सही उत्तर के लिए +1। इसके अलावा यदि आवश्यक हो तो कोड में बाइंडिंग का उपयोग कर सकते हैं (http://msdn.microsoft.com/en-us/magazine/cc700358.aspx#id0190003) – Anvaka

+2

त्वरित उत्तर के लिए धन्यवाद। ऐसा नहीं लगता था कि यह इतना आसान होगा;) – sofri

+0

बाध्यकारी कोड के पीछे सेट किया जा सकता है लेकिन कार्यान्वयन नहीं होना चाहिए और यह कोड केवल तभी काम करेगा जब यह था। – David

3

मैं लिंक के द्वारा पोस्ट से कोड लिया टेम्पलेट के रूप में Anvaka। मैं टेलीरिक के RadMenuItem का उपयोग करता हूं, लेकिन निश्चित रूप से आप किसी भी अन्य घटक का उपयोग कर सकते हैं जो कमांड प्रॉपर्टी का पर्दाफाश करता है।

item = new RadMenuItem(); 
item.Header = "Hide Column"; 
DependencyProperty commProp = RadMenuItem.CommandProperty; 
if (!BindingOperations.IsDataBound(item, commProp)) { 
    Binding binding = new Binding("HideColumnCommand"); 
    BindingOperations.SetBinding(item, commProp, binding); 
} 
//this is optional, i found easier to pass the direct ref of the parameter instead of another binding (it would be a binding to ElementName). 
item.CommandParameter = headerlCell.Column; 
menu.Items.Add(item); 

आशा है कि यह मदद करता है ... और अगर कुछ स्पष्ट नहीं है, खेद है, यह मेरी पहली पोस्ट :)

12

स्वीकार किए जाते हैं जवाब महान बटन कमान की पहुंच है अगर काम करता रहेगा। हालांकि, एमवीवीएम में इन्हें आमतौर पर अलग रखा जाता है (दृश्य में बटन और दृश्य-मॉडल में कमांड)। एक्सएएमएल में आप आम तौर पर इसे हुक करने के लिए बाध्यकारी डेटा का उपयोग करेंगे (प्रश्न में उदाहरण की तरह)।

मेरे प्रोग्राम ने मुझे एक त्रुटि दी जब मेरे गतिशील बटन को कमांड नहीं मिला (क्योंकि यह पूरी तरह से अलग नामस्थान में था)। इस प्रकार मैंने इसे हल करने का अंत किया:

SurfaceButton.SetBinding (Button.CommandProperty, new Binding("SaveReservationCommand")); 
संबंधित मुद्दे

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