2010-02-21 17 views
43

मैं बंधन जैसे WPF में मोड, विभिन्न डेटा समझ में नहीं आता:विभिन्न WPF बाध्यकारी मोड क्या हैं?

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

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

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

उत्तर

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

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

अधिक जानकारी के लिए, BindingMode enum on MSDN देखें।

+0

धन्यवाद। यह सहायक है ... लेकिन कृपया दोवे उदाहरण निर्दिष्ट करें ... मैं जानना चाहता हूं कि यह कोड-पीछे कैसे दिखता है। –

+1

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

+0

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

16

एक बाध्यकारी दो संस्थाओं के होते हैं:

  1. स्रोत (MVVM स्थितियों में आमतौर पर ViewModel)
  2. लक्ष्य (यूआई नियंत्रण)

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


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

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

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

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

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

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