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