2010-10-07 23 views
7

पर निर्भर करता है कि एक निर्भरता संपत्ति के लिए बाध्यकारी कोड-पीछे में आसान है। आप बस एक नया System.Windows.Data.Binding ऑब्जेक्ट बनाएं, और फिर लक्ष्य निर्भरता ऑब्जेक्ट की SetBinding विधि को कॉल करें।कोड-पीछे

लेकिन जब आप जिस संपत्ति को बाध्यकारी कर रहे हैं वह एक सीएलआर संपत्ति है और आप SetBinding पर DependencyProperty तर्क प्रदान नहीं कर सकते हैं?

संपादित करें: ऑब्जेक्ट INotifyPropertyChanged लागू करता है, यदि यह प्रासंगिक है।

उत्तर

0

अगर मैं आपके सवाल का सही ढंग से समझ आप एक FrameworkElement है कि एक सादे पुराने आम संपत्ति है जो किसी के रूप में ऊपर का समर्थन नहीं उजागर करता है निर्भरता संपत्ति। हालांकि आप इसे बाध्यकारी के लक्ष्य के रूप में सेट करना चाहते हैं।

काम करने के लिए बाध्यकारी दोवे प्राप्त करने से पहले संभावना नहीं होगी और ज्यादातर मामलों में असंभव होगा। हालांकि अगर आप केवल एक तरह से बाध्यकारी चाहते हैं तो आप वास्तविक संपत्ति के लिए एक सरोगेट के रूप में एक संलग्न संपत्ति बना सकते हैं।

आइए कल्पना करें कि मेरे पास StatusDisplay फ्रेमवर्क तत्व है जिसमें एक स्ट्रिंग Message संपत्ति है जो कुछ वास्तव में गूंगा कारण Message पर निर्भरता संपत्ति के रूप में समर्थन नहीं करता है।

public static StatusDisplaySurrogates 
{ 
    public static string GetMessage(StatusDisplay element) 
    { 
     if (element == null) 
     { 
      throw new ArgumentNullException("element"); 
     } 
     return element.GetValue(MessageProperty) as string; 
    } 

    public static void SetMessage(StatusDisplay element, string value) 
    { 
     if (element == null) 
     { 
      throw new ArgumentNullException("element"); 
     } 
     element.SetValue(MessageProperty, value); 
    } 

    public static readonly DependencyProperty MessageProperty = 
     DependencyProperty.RegisterAttached(
      "Message", 
      typeof(string), 
      typeof(StatusDisplay), 
      new PropertyMetadata(null, OnMessagePropertyChanged)); 

    private static void OnMessagePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     StatusDisplay source = d as StatusDisplay; 
     source.Message = e.NewValue as String; 
    } 
} 
बेशक

अगर StatusDisplay नियंत्रण अपने Message संपत्ति किसी भी कारण से इस सरोगेट के राज्य अब से मेल खाएगी के लिए सीधे संशोधित है। फिर भी यह आपके उद्देश्यों के लिए कोई फर्क नहीं पड़ता।

0

रुको। क्या आप 2 सीएलआर गुणों को बांधने की कोशिश कर रहे हैं ?? मुझे कहना है कि सामान्य तरीके से हासिल करना असंभव है। जैसे। कोई भी कट्टर हैक जो आपके पूरे एप्लिकेशन को अस्थिर बना सकता है। बाइंडिंग का एक पक्ष निर्भरता प्रॉपर्टी होना चाहिए। अवधि।

0

उदाहरण के लिए, आप एक सीपीआर संपत्ति को एक निर्भरता प्रॉपर्टी पर नियंत्रण में जोड़ सकते हैं। इस सीई में, सीएलआर संपत्ति बाध्यकारी का स्रोत है और निर्भरता प्रजनन बाध्यकारी का लक्ष्य है। इसके लिए काम करने के लिए, सीएलआर संपत्ति के साथ कक्षा को INotifyPropertyChanged लागू करना है।

यहाँ कैसे आप इसके पीछे कोड में क्या है:

Binding canModifyBinding = new Binding(); 
canModifyBinding.Source = LastRecord; 
canModifyBinding.Path = new PropertyPath("CanModify"); 
BindingOperations.SetBinding(this, CanModifyProperty, canModifyBinding); 

इस मामले में, बाध्यकारी वस्तु स्रोत के बारे में जानकारी का प्रतिनिधित्व करता है: क्या वस्तु स्रोत है, जो उस वस्तु की संपत्ति है एक आप है 'दिलचस्पी है। बाइंडिंगऑपरेशंस.सेटबाइंडिंग एक स्थैतिक विधि है जो निर्दिष्ट करता है कि निर्भरता प्रॉपर्टी जिस पर निर्भरता ऑब्जेक्ट बाध्यकारी (तर्क 2 1 क्रमशः) का लक्ष्य है, और स्रोत पर जाने के लिए उपयोग करने के लिए बाध्यकारी है।

HTH

टोनी