विभिन्न WPF बाइंडिंग मोड क्या हैं?


86

मुझे WPF में विभिन्न डेटा बाइंडिंग मोड्स की समझ नहीं है, जैसे:

  • एक रास्ता
  • दो रास्ते
  • एक बार
  • आदि...

इनमें से प्रत्येक मोड का क्या अर्थ है?

इनका उपयोग कब किया जाना चाहिए?

जवाबों:


159
  • OneWay: इसका उपयोग तब करें जब आप उपयोगकर्ता इंटरफ़ेस को अद्यतन करने के लिए बाध्य गुण चाहते हैं।
  • TwoWay: इसमें एक जैसा व्यवहार है OneWayऔर OneWayToSourceसंयुक्त है। बाउंड प्रॉपर्टी यूजर इंटरफेस को अपडेट करेगी, और यूजर इंटरफेस में बदलाव बाउंड प्रॉपर्टी को अपडेट करेगा ( उदाहरण के लिए TextBoxया इसके साथ आप इसका इस्तेमाल करेंगे Checkbox।)
  • OneTime: इसमें वैसा ही व्यवहार है, जैसे OneWayकि यह केवल एक बार यूजर इंटरफेस को अपडेट करेगा। यह आपके बाइंडिंग के लिए डिफ़ॉल्ट विकल्प होना चाहिए (विभिन्न कारणों से मैं यहां पर विस्तार से नहीं बताऊंगा), आपको केवल अन्य प्रकार के बाइंडिंग का उपयोग करना चाहिए यदि आपको वास्तव में अतिरिक्त कार्यक्षमता की आवश्यकता है।
  • OneWayToSource: यह विपरीत है OneWay- उपयोगकर्ता इंटरफ़ेस मूल्य परिवर्तन बाध्य संपत्ति को अद्यतन करते हैं।

यदि आप कुछ भी निर्दिष्ट नहीं करते हैं, तो व्यवहार उस नियंत्रण पर निर्भर करेगा जो आप उपयोग कर रहे हैं।

अधिक जानकारी के लिए, BindingModeMSDN पर enum देखें ।


धन्यवाद। यह मददगार है ... लेकिन plz TwoWay उदाहरण को निर्दिष्ट करता है ... मैं जानना चाहता हूं कि इसका कोड-बैक कैसे दर्शाता है।
DATT OZA

2
@ डैट: "निर्दिष्ट" से आपका क्या तात्पर्य है? मूल रूप से, यदि आप XAML में मोड = टूवे सेट करते हैं, तो जब आप GUI मान को बदलते हैं, तो यह स्वतः ही C # प्रॉपर्टी को अपडेट कर देगा। लेकिन कोड-पीछे में आपकी संपत्ति को एक वर्ग (एक ViewModel की तरह) में लागू करने की आवश्यकता है जो INotifyPropertyChanged इंटरफ़ेस को लागू करता है। जब कोड-पीछे सेट के माध्यम से संपत्ति के मूल्य को बदलता है, तो आपको प्रॉपर्टीचेंज को कॉल करने की आवश्यकता होती है ताकि GUI को मूल्य परिवर्तन की सूचना दी जाए, और यह अपने आप ही अपडेट हो जाएगा।
डेव

1
यदि आप कुछ भी निर्दिष्ट नहीं करते हैं, तो व्यवहार उस PROPERTY पर निर्भर करेगा जिसका आप उपयोग कर रहे हैं।
मौरो सेम्पीटरो

37

एक बंधन में दो संस्थाएँ होती हैं:

  1. स्रोत (आमतौर पर एमवीवीएम परिदृश्यों में ViewModel)
  2. लक्ष्य (UI नियंत्रण)

लक्ष्य के लिए एक DependencyObject(काम के लिए बाध्यकारी) DependencyObjectहोना चाहिए और स्रोत या तो हो सकता है या उसके पास WPF बाइंडिंग सिस्टम को बदलने के लिए नकल करने के लिए कुछ तंत्र होना चाहिए (Implemeting INotifyPropetyChnagedइंटरफ़ेस)।


MVVM ViewModel परियोजना को किसी भी संबंधित संदर्भ से मुक्त होने की सलाह देता है और इसलिए INotifyPropertyChangedWPF बाइंडिंग द्वारा सुनाई जा रही स्रोत वस्तु को बनाने के लिए इंटरफ़ेस का उपयोग करने की सिफारिश की जाती है । बाइंडिंग सोर्स की प्रॉपर्टी और टारगेट की प्रॉपर्टी (होना चाहिए DependencyProperty) के बीच होता है। जैसे TextPropertyके TextBoxवर्ग (माना) को databound है UserNameदृश्य मॉडल की संपत्ति। WPF बाइंडिंग चार प्रकार के बाइंडिंग प्रदान करता है। याद रखें, जब तक आप अन्यथा इसे चलाने के लिए निर्दिष्ट नहीं करते हैं तब तक बाइंडिंग UI थ्रेड पर चलती है।

  1. OneWay : लक्षित संपत्ति बदली जा रही स्रोत संपत्ति को सुनेगी और खुद को अपडेट करेगी। यदि आप ViewwModel की UserNameसंपत्ति को प्रोग्रामेटिक रूप से बदलते हैं, तो यह टेक्स्ट बॉक्स में प्रतिबिंबित होगा। यह मध्यवर्ती लागत का है क्योंकि बाइंडिंग सिस्टम केवल परिवर्तनों के लिए स्रोत देखता है ।
  2. टूवे : लक्ष्य संपत्ति को बदली जा रही स्रोत संपत्ति को सुनेंगे और खुद को अपडेट करेंगे। और स्रोत संपत्ति लक्ष्य संपत्ति को बदले जाने के लिए सुनेगी और खुद को अपडेट करेगी। संपत्ति TextPropertyऔर UserNameसंपत्ति दोनों सिंक में रहेंगी और एक-दूसरे को बदलने पर एक-दूसरे को अपडेट करेंगी। यह सबसे महंगा है क्योंकि बाइंडिंग सिस्टम को बदलाव के लिए दोनों पक्षों को देखना पड़ता है।
  3. OneWayToSource : लक्ष्य प्रॉपर्टी को बदलने पर स्रोत गुण बदल जाएगा। यदि उपयोगकर्ता परिवर्तन करता है TextProperty, तो UserNameसंपत्ति परिवर्तित मूल्य को ले जाएगी। यह फिर से मध्यवर्ती लागत का है क्योंकि बाइंडिंग सिस्टम केवल परिवर्तनों के लिए लक्ष्य देखता है ।
  4. वनटाइम : यह केवल एक बार बाइंडिंग के जीवनकाल के दौरान होता है, जब बाइंडिंग होती है, तो टार्गेट प्रॉपर्टी को सोर्स प्रॉपर्टी के साथ अपडेट किया जाएगा । यह कम से कम महंगा है और उन परिदृश्यों के लिए उचित है जहां आपके पास स्थिर डेटा होना चाहिए जैसे कि Label, TextBlockआदि।

यदि आप कुछ भी उल्लेख नहीं करते हैं, तो प्रत्येक लक्ष्य संपत्ति में स्वयं के साथ जुड़ा हुआ एक डिफ़ॉल्ट बाइंडिंग मोड है। उदाहरण के लिए TextPropertyएक के TextBoxरूप में बाध्यकारी मोड डिफ़ॉल्ट है TwoWay। के लिए TextPropertyएक की TextBlockयह एक तरीका है।

यह सलाह दी जाती है कि आप सही मोड का चयन करें क्योंकि यह विशेष रूप से उन मामलों में जहां आप अपने यूआई में बड़ी संख्या में नियंत्रण रखते हैं, आवेदन विलंबता को कम करने में मदद कर सकते हैं।

MVVM पर अधिक जानकारी के लिए यहाँ मेरे द्वारा लिखा गया एक लेख है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.