2010-11-19 20 views
34

कुछ संदेहों को स्पष्ट करने के लिए बस एक छोटा सा प्रश्न। जब कोई तत्व निर्भरता संपत्ति से बंधे होते हैं तो सेटर्स नहीं चलते हैं?निर्भरता निर्भरता गुणों पर नहीं चलते हैं?

public string TextContent 
{ 
    get { return (string)GetValue(TextContentProperty); } 
    set { SetValue(TextContentProperty, value); Debug.WriteLine("Setting value of TextContent: " + value); } 
} 

public static readonly DependencyProperty TextContentProperty = 
    DependencyProperty.Register("TextContent", typeof(string), typeof(MarkdownEditor), new UIPropertyMetadata("")); 

...

<TextBox Text="{Binding TextContent}" /> 

के रूप में मैं अपने सेटर में नीचे देखा नहीं चलता है

Debug.WriteLine("Setting value of TextContent: " + value); 
+0

अगर आप सेटर में एक ब्रेकपाइंट डाल आप देख सकते हैं, जहां यह सेट हो जाता है। – VoodooChild

+4

यदि संपत्ति सेट होने पर आपको कोड निष्पादित करने की आवश्यकता है, तो UIMetadata कक्षा के CoerceValueCallback या ValueChangedCallback को देखें। – Jens

+0

संभावित डुप्लिकेट [डब्ल्यूपीएफ: एक्सएएमएल संपत्ति घोषणाएं सेटर्स के माध्यम से सेट नहीं की जा रही हैं?] (Http://stackoverflow.com/questions/3836076/wpf-xaml-property-declarations-not-being-set-via-setters) –

उत्तर

46

WPF बाइंडिंग इंजन GetValue और SetValue कॉल सीधे (संपत्ति setters को दरकिनार और टिककर खेल)। आपको वहां होने वाली संपत्ति की आवश्यकता है ताकि इसे XAML मार्कअप (और सही ढंग से संकलित) में समर्थित किया जा सके।

+0

हाय , मुझे समझ में नहीं आता कि आप क्या कहते हैं? – Emixam23

+0

@ Emixam23 डीन कह रहा है कि ओपी टेक्स्टकंटेंट प्रॉपर्टी में डीबग कथन नहीं लगा सकता है यह निर्धारित करने के लिए कि क्या डीपी ठीक से बाध्य किया जा रहा है या नहीं, क्योंकि डब्ल्यूपीएफ सेटवैल्यू को कॉल करेगा, न कि टेक्स्टकंटेंट सेटर। – Dave

34

निर्भरता प्रॉपर्टी बनाने के लिए, निर्भरता प्रॉपर्टी का उदाहरण बनाने के लिए अपने प्रकार के डिस्पेंडेंसी प्रॉपर्टी प्रकार का एक स्थिर क्षेत्र जोड़ें और निर्भरताप्रॉपर्टी पंजीकरण करें। DependendyProperty का नाम हमेशा के साथ समाप्त होना चाहिए ... संपत्ति। यह डब्ल्यूपीएफ में एक नामकरण सम्मेलन है।

इसे सामान्य .NET संपत्ति के रूप में एक्सेस करने योग्य बनाने के लिए आपको एक संपत्ति wrapper जोड़ने की आवश्यकता है। यह रैपर आंतरिक रूप से प्राप्त करने और मूल्य निर्धारण को GetValue() और SetValue() निर्भरता ऑब्जेक्ट से विरासत में प्राप्त करने और निर्भरताप्रॉपर्टी को कुंजी के रूप में पारित करने के द्वारा मूल्य को सेट करने से कुछ और नहीं करता है।

इन गुणों में कोई तर्क न जोड़ें, क्योंकि उन्हें केवल कोड से संपत्ति सेट करते समय ही बुलाया जाता है। यदि आप XAML से संपत्ति सेट करते हैं तो SetValue() विधि को सीधे कहा जाता है।

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

स्रोत: http://www.wpftutorial.net/DependencyProperties.html

+0

आपने अपना जीवन बचा लिया है! – j00hi

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