2008-10-04 11 views
11

INotifyPropertyChanged काफी आत्म व्याख्यात्मक है और मुझे लगता है कि मैं इसे उठाने के बारे में स्पष्ट हूं (यानी जब मैंने मूल्यों को अपडेट करना समाप्त कर दिया है)।
यदि मैं INotifyPropertyChanging को लागू करता हूं, तो जैसे ही मैं सेटटर या अन्य विधि में प्रवेश करता हूं, जैसे ऑब्जेक्ट्स को बदलता है और फिर किसी भी गार्ड और सत्यापन के साथ जारी रहता है, तो ईवेंट को बढ़ाने के लिए मैं आगे बढ़ रहा हूं।INotifyPropertyChanging और सत्यापन: मैं PropertyChanging कब उठा सकता हूं?

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

यदि ऑब्जेक्ट के उपभोक्ता इस संपत्ति का उपयोग कर रहे हैं (जैसे कि परिवर्तन ट्रैकिंग के लिए ईवेंट का उपयोग करके LINQ से SQL का कहना है) क्या मुझे यह मानना ​​चाहिए कि एक बार मैंने मान्य किया है कि मेरे द्वारा दिए गए मान अच्छे हैं और वस्तु की स्थिति परिवर्तन के लिए मान्य है?

इस घटना के लिए अनुबंध क्या है और ग्राहकों में किन दुष्प्रभाव होंगे?

उत्तर

13

यदि आपकी ऑब्जेक्ट को वह मान दिया गया है जो संपत्ति के लिए अमान्य है और आप अपवाद फेंकते हैं तो आपको PropertyChanging ईवेंट नहीं बढ़ाया जाना चाहिए। आपको केवल तब ईवेंट उठाना चाहिए जब आपने यह तय किया कि मूल्य बदल जाएगा। विशिष्ट उपयोग परिदृश्य एक सरल क्षेत्र को बदलने के लिए है:

public T Foo 
{ get 
    { return m_Foo; 
    } 
    set 
    { if (m_Foo == value) return; //no need for change (or notification) 
     OnPropertyChanging("Foo"); 
     m_Foo = value; 
     OnPropertyChanged("Foo"); 
    } 
} 
+0

जैसा कि आपने DLINQ पर काम किया था (इसे तब सही कहा जाता था?) मुझे लगता है कि यह काफी आधिकारिक है। क्या कोई संदर्भ है जो आप मुझे इंगित कर सकते हैं? –

+0

DLINQ डेवलपर डिवीजन द्वारा विकसित किया गया था (जिसमें विजुअल स्टूडियो टीम शामिल है)। एडीओ.NET टीम ने LINQ को डेटासेट और LINQ से इकाइयों तक बनाया। Http://msdn.microsoft.com/en-us/library/bb425822.aspx#linqtosql_topic25 –

+0

पर एक संदर्भ है, मैं सही हूं। धन्यवाद। –

1

एक अलग रूप में के रूप में - like so - PostSharp करने के लिए स्वतः लागू INotifyPropertyChanged दिलचस्प की क्षमता है।

+0

यह दिलचस्प है। मैं एक कोड स्निपेट का उपयोग कर रहा हूं (और एक बेस क्लास है जो वास्तव में घटना आयोजित करती है और इसे उठाती है) लेकिन ऐसा लगता है कि किसी को भी एल्स समस्या होने के लिए रोना पड़ रहा है। –

+0

एक और तरफ के रूप में, यह कुछ बल्कि दिलचस्प डीआई/आईओसी जादू के साथ 'ऑटो-कार्यान्वित' भी हो सकता है - [यहां देखा गया] (http://stackoverflow.com/questions/871405/why-do-i-need-an- आईओसी-कंटेनर-ए-विरोधी-से-सीधा-डी-कोड/1532254 # 1532254) (मुझे इस पर बेचा नहीं गया है, लेकिन अगर कुछ और नहीं तो यह दिलचस्प शैक्षिक पढ़ने को बनाता है) – fostandy

0

यदि आप INotifyProperty को लागू करने से बचाना चाहते हैं, तो इसके बजाय Update Controls .NET का उपयोग करने पर विचार करें। यह लगभग सभी बहीखाता कोड को समाप्त करता है।