2009-12-21 12 views
5

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

मैंने नियंत्रण पर टेक्स्टबॉक्स फंस लिया है, इसलिए मैं एक ईवेंट ट्रिगर कर सकता हूं - जब भी मैं ईवेंट को ट्रिगर करता हूं तो माईएनिमल प्रॉपर्टी सेट हो जाती है - हालांकि अगर मैं माईएनिमल प्रॉपर्टी के सेटटर पर ब्रेक पॉइंट डालता हूं तो इसे कभी नहीं निकाल दिया जाता है !

मुझे लगता है कि मुझे WPF निर्भरता गुण/बाध्यकारी के बारे में कुछ मौलिक याद आ रही है ?!

और इसलिए मेरा सवाल यह है कि, अगर मैं सेटटर का उपयोग नहीं कर सकता तो मैं इसे कब सेट कर सकता हूं? अगर मैं डालता हूं कि क्या मैंने InitializeComponent() के बाद ब्रेक पॉइंट डाला है और मुझे यह देखने के लिए एक नज़र डाली थी कि क्या कोई इवेंट एक हुक अप कर सकता है - डाटाबेसिंग समाप्त या इसी तरह? लेकिन यह नहीं देख सकता कि यह क्या होगा ...

क्या कोई भी सहायता कर सकता है?

धन्यवाद,

एंडी

public partial class ControlStrip 
{ 
    public ControlStrip() 
    { 
     InitializeComponent(); 
    } 

    public Animal MyAnimal 
    { 
     get 
     { 
      return (Animal)GetValue(MyAnimalProperty); 
     } 
     set 
     { 
      SetValue(MyAnimalProperty, value); 
     } 
    } 

    public static readonly DependencyProperty MyAnimalProperty = 
     DependencyProperty.RegisterAttached("MyAnimal", typeof (Animal), typeof (ControlStrip)); 

    private void TextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) 
    { 
     var myAnimal = MyAnimal; 
     MessageBox.Show(myAnimal.Name); 
    } 

} 
+1

एक सवाल:

यहां कुछ नमूना कोड है? ऐसा प्रतीत नहीं होता है कि यह एक संलग्न संपत्ति होनी चाहिए, बल्कि एक सामान्य डीपी ... –

+0

यह एक बहुत अच्छा मुद्दा है, चीयर्स - कॉपी और पेस्ट करें! –

उत्तर

5

सेटटर विधियों को रनटाइम द्वारा कभी नहीं कहा जाता है। वे सीधे निर्भरता प्रॉपर्टी पर जाते हैं। आपको RegisterAttached() पर अपनी कॉल में अतिरिक्त तर्क जोड़ने की आवश्यकता होगी। वहां आप एक PropertyChangedCallback जोड़ सकते हैं। - तुम क्यों RegisterAttached और रजिस्टर नहीं प्रयोग कर रहे हैं

public static readonly DependencyProperty MyAnimalProperty = 
    DependencyProperty.RegisterAttached("MyAnimal", typeof (Animal), typeof (ControlStrip), new PropertyMetadata(AnimalChanged)); 

private static void AnimalChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) 
{ 
    // Do work here 
} 
4

सेटर अपने उपयोग के लिए केवल वहाँ है - आप वास्तव में संपत्ति बंद पूरी तरह से, जब से DataBinding वास्तविक DependencyProperty ही है, CLR संपत्ति नहीं का उपयोग करता है छोड़ सकते हैं।

यदि आपको यह देखने की ज़रूरत है कि संपत्ति कब बदलती है, तो आपको अपनी निर्भरता संपत्ति पर PropertyMetadata निर्दिष्ट करना होगा, और PropertyChangedCallback प्रदान करना होगा।

विवरण के लिए, मैं Dependency Property Metadata पढ़ने की सलाह देता हूं।