2009-06-08 15 views
8

मैं सी # में एक नई कक्षा तैयार कर रहा हूं जिसमें कुछ गुण हैं। मेरे उपयोगकर्ता जानना चाहेंगे कि उनमें से प्रत्येक कब बदलता है।बेहतर क्या है? INotifyProperty बदल दिया या अलग * बदल घटनाओं?

बेहतर विकल्प क्या है? INotifyProperty कार्यान्वयन की बदलती शैली, या सिर्फ मेरे गुणों के अनुरूप अलग घटनाओं? अथवा दोनों?

उत्तर

9

आगे बढ़ना, INotifyPropertyChanged मानक है, और WPF में बहुत बेहतर समर्थन है। मुझे याद है कि BindingList<T> केवल INotifyPropertyChanged का सम्मान करता है (HookPropertyChanged और UnhookPropertyChanged परावर्तक में देखें)।

यह भी अधिक कुशल है, क्योंकि यूआई को केवल एक ईवेंट की बजाय एक इवेंट हुक की आवश्यकता होती है - और आपकी कक्षा अधिक कुशल हो सकती है क्योंकि इसे केवल एक हैंडलर के लिए एक फ़ील्ड की आवश्यकता होती है (या तो प्रति संपत्ति के बजाय, या EventHandlerList और स्थिर कुंजी का एक सेट) के माध्यम से जाने का झुकाव

पुरानी शैली मुख्य रूप से एक हैंगओवर है।

+0

धन्यवाद, मैंने इंटरफ़ेस नाम तय किया है। –

+0

लेकिन क्या आप इसे स्वयं देख सकते हैं? मेरा मतलब है, क्या आप समझने के लिए एक स्ट्रिंग तुलना करने की उम्मीद कर रहे हैं? –

+0

हां, मूल रूप से। या यूआई नियंत्रणों के खिलाफ तुलना करें जो आमतौर पर एक मैपिंग नाम होगा जो एक स्ट्रिंग है। –

2

INotifyPropertyChanged इंटरफेस को कार्यान्वित करने से आपको बाध्यकारी स्रोतों को स्वचालित रूप से आपके गुणों में किए गए परिवर्तनों को सुनने और नियंत्रण अपडेट करने का अतिरिक्त लाभ मिलेगा।

ऐसा करने का प्रयास करें। INotifyPropertyChanged इंटरफ़ेस के बिना एक कक्षा बनाएं और इसे किसी चीज़ से बांधें। उदाहरण के लिए आप टेक्स्टबॉक्स की टेक्स्ट प्रॉपर्टी में अपनी संपत्तियों में से एक को बाध्य कर सकते हैं। एक बटन जोड़ें जो टेक्स्टबॉक्स का पाठ नहीं बदलेगा, लेकिन बॉक्स में बाध्य होने वाले उदाहरण में संबंधित संपत्ति का मूल्य। चलाएं और बटन पर क्लिक करें। टेक्स्टबॉक्स को बदलाव की अधिसूचना नहीं दी जाएगी। यदि आप कक्षा में परिवर्तित किए गए INotifyProperty को कार्यान्वित करते हैं, तो प्रॉपर्टी के सेटटर को प्रॉपर्टी चेंज किए जाने के बाद भी इसके परिवर्तन की सूचना दी जाती है, फिर भी, प्रयोग को दोहराने के बाद, आप टेक्स्टबॉक्स अपडेटिंग देखेंगे।

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