मैं अपने यूजर इंटरफेस में डब्ल्यूपीएफ और एमवीवीएम पैटर्न का उपयोग कर रहा हूं। मेरे व्यूमोडेल में मेरे पास मिलीमीटर में दूरी वाली एक सूची है, जिसे मैं ListView.ItemsSource को सूची में बाध्य करके ListView में प्रदर्शित करता हूं। हालांकि, मैं "मेट्रिक" चेकबॉक्स की स्थिति के आधार पर मीटर या पैरों को अधिक प्राकृतिक इकाई का उपयोग करने के लिए प्रदर्शित मूल्यों को पसंद करूंगा।डब्ल्यूपीएफ और एमवीवीएम: रनटाइम पर डेटा बाइंडिंग कनवर्टर बदलना
मैंने कुछ सरल वर्ग, मिलिमेट्रेस टॉमेटर्स कनवर्टर और मिलिमेटर्स टॉफेट कनवर्टर लिखा है, जिनमें से दोनों IValueConverter को लागू करते हैं। हालांकि मैं कनवर्टर प्रॉपर्टी को अपने डेटा पर एक या दूसरे पर बाध्यकारी सेट कर सकता हूं, लेकिन मुझे यकीन है कि इन कन्वर्टर्स के बीच कैसे बदलाव करना है जब चेकबॉक्स की स्थिति बदलती है।
मेरी योजना मेरे व्यूमोडेल पर "IValueConverter लंबाई कनवर्टर" फ़ील्ड होना था, जिसे मैं एक कनवर्टर या दूसरे पर सेट कर सकता था, फिर मेरे एक्सएएमएल में ...="{Binding Converter={Binding Path=lengthConverter}}"
- दुर्भाग्यवश यह काम नहीं करता क्योंकि कनवर्टर निर्भरता संपत्ति नहीं है।
रनटाइम पर डेटा बाध्यकारी द्वारा उपयोग किए गए कनवर्टर को कैसे बदला जा सकता है?
आप DependencyObject.GetBinding (निर्भरता प्रॉपर्टी) का उपयोग करने में सक्षम होना चाहिए, उदा। बाइंडिंग ऑब्जेक्ट प्राप्त करने (और संशोधित) करने के लिए myTextBlock.GetBinding (TextBlock.TextProperty)। – Heinzi
दुर्भाग्यवश, एमवीवीएम पैटर्न का पालन करने का अर्थ है कि कोड को व्यूमोडेल में रहने की आवश्यकता होगी - जिसमें दृश्य का कोई संदर्भ नहीं है और इस प्रकार "myTextBlock" को स्पर्श नहीं किया जा सकता है। – user200783