मुझे WPF में विभिन्न डेटा बाइंडिंग मोड्स की समझ नहीं है, जैसे:
- एक रास्ता
- दो रास्ते
- एक बार
- आदि...
इनमें से प्रत्येक मोड का क्या अर्थ है?
इनका उपयोग कब किया जाना चाहिए?
जवाबों:
OneWay
: इसका उपयोग तब करें जब आप उपयोगकर्ता इंटरफ़ेस को अद्यतन करने के लिए बाध्य गुण चाहते हैं।TwoWay
: इसमें एक जैसा व्यवहार है OneWay
और OneWayToSource
संयुक्त है। बाउंड प्रॉपर्टी यूजर इंटरफेस को अपडेट करेगी, और यूजर इंटरफेस में बदलाव बाउंड प्रॉपर्टी को अपडेट करेगा ( उदाहरण के लिए TextBox
या इसके साथ आप इसका इस्तेमाल करेंगे Checkbox
।)OneTime
: इसमें वैसा ही व्यवहार है, जैसे OneWay
कि यह केवल एक बार यूजर इंटरफेस को अपडेट करेगा। यह आपके बाइंडिंग के लिए डिफ़ॉल्ट विकल्प होना चाहिए (विभिन्न कारणों से मैं यहां पर विस्तार से नहीं बताऊंगा), आपको केवल अन्य प्रकार के बाइंडिंग का उपयोग करना चाहिए यदि आपको वास्तव में अतिरिक्त कार्यक्षमता की आवश्यकता है।OneWayToSource
: यह विपरीत है OneWay
- उपयोगकर्ता इंटरफ़ेस मूल्य परिवर्तन बाध्य संपत्ति को अद्यतन करते हैं।यदि आप कुछ भी निर्दिष्ट नहीं करते हैं, तो व्यवहार उस नियंत्रण पर निर्भर करेगा जो आप उपयोग कर रहे हैं।
अधिक जानकारी के लिए, BindingMode
MSDN पर enum देखें ।
एक बंधन में दो संस्थाएँ होती हैं:
लक्ष्य के लिए एक DependencyObject
(काम के लिए बाध्यकारी) DependencyObject
होना चाहिए और स्रोत या तो हो सकता है या उसके पास WPF बाइंडिंग सिस्टम को बदलने के लिए नकल करने के लिए कुछ तंत्र होना चाहिए (Implemeting INotifyPropetyChnaged
इंटरफ़ेस)।
MVVM ViewModel परियोजना को किसी भी संबंधित संदर्भ से मुक्त होने की सलाह देता है और इसलिए INotifyPropertyChanged
WPF बाइंडिंग द्वारा सुनाई जा रही स्रोत वस्तु को बनाने के लिए इंटरफ़ेस का उपयोग करने की सिफारिश की जाती है । बाइंडिंग सोर्स की प्रॉपर्टी और टारगेट की प्रॉपर्टी (होना चाहिए DependencyProperty
) के बीच होता है। जैसे TextProperty
के TextBox
वर्ग (माना) को databound है UserName
दृश्य मॉडल की संपत्ति। WPF बाइंडिंग चार प्रकार के बाइंडिंग प्रदान करता है। याद रखें, जब तक आप अन्यथा इसे चलाने के लिए निर्दिष्ट नहीं करते हैं तब तक बाइंडिंग UI थ्रेड पर चलती है।
UserName
संपत्ति को प्रोग्रामेटिक रूप से बदलते हैं, तो यह टेक्स्ट बॉक्स में प्रतिबिंबित होगा। यह मध्यवर्ती लागत का है क्योंकि बाइंडिंग सिस्टम केवल परिवर्तनों के लिए स्रोत देखता है ।TextProperty
और UserName
संपत्ति दोनों सिंक में रहेंगी और एक-दूसरे को बदलने पर एक-दूसरे को अपडेट करेंगी। यह सबसे महंगा है क्योंकि बाइंडिंग सिस्टम को बदलाव के लिए दोनों पक्षों को देखना पड़ता है।TextProperty
, तो UserName
संपत्ति परिवर्तित मूल्य को ले जाएगी। यह फिर से मध्यवर्ती लागत का है क्योंकि बाइंडिंग सिस्टम केवल परिवर्तनों के लिए लक्ष्य देखता है ।Label
, TextBlock
आदि।यदि आप कुछ भी उल्लेख नहीं करते हैं, तो प्रत्येक लक्ष्य संपत्ति में स्वयं के साथ जुड़ा हुआ एक डिफ़ॉल्ट बाइंडिंग मोड है। उदाहरण के लिए TextProperty
एक के TextBox
रूप में बाध्यकारी मोड डिफ़ॉल्ट है TwoWay
। के लिए TextProperty
एक की TextBlock
यह एक तरीका है।
यह सलाह दी जाती है कि आप सही मोड का चयन करें क्योंकि यह विशेष रूप से उन मामलों में जहां आप अपने यूआई में बड़ी संख्या में नियंत्रण रखते हैं, आवेदन विलंबता को कम करने में मदद कर सकते हैं।
MVVM पर अधिक जानकारी के लिए यहाँ मेरे द्वारा लिखा गया एक लेख है।