2010-04-16 18 views
11

WPF में यह प्रारूप मूल्यों आदि के लिए एक ValueConverter उपयोग करने के लिए आसान है में Databinding के साथ एक ValueConverter का उपयोग कैसे करूँ,मैं Winforms

मुझे पता है (हमारे मामले में कुछ संख्या एक अलग इकाई, जैसे मील किमी में बदलने) यह Winforms में किया जा सकता है, लेकिन मेरी सभी Googleिंग सिर्फ WPF और Silverlight के लिए परिणाम लाती है।

+0

संबंधित: http://stackoverflow.com/q/3430217/240733 – stakx

उत्तर

16

यदि आप कस्टम स्रोत के साथ डेटा स्रोत संपत्ति को सजाने में सक्षम और सक्षम हैं तो आप use a TypeConverter कर सकते हैं।

अन्यथा आपको Parse और FormatBinding ऑब्जेक्ट की घटनाओं को संलग्न करना होगा। यह दुर्भाग्यवश, सबसे सरल परिदृश्यों के लिए सभी के लिए बाध्यकारी के लिए डिजाइनर का उपयोग समाप्त करता है।

निर्माता में:

उदाहरण के लिए, मान लीजिए कि आप एक TextBox एक पूर्णांक स्तंभ किलोमीटर का प्रतिनिधित्व करने के लिए बाध्य करना चाहता था और तुम मील में दृश्य प्रतिनिधित्व चाहता था जाने

Binding bind = new Binding("Text", source, "PropertyName"); 

bind.Format += bind_Format; 
bind.Parse += bind_Parse; 

textBox.DataBindings.Add(bind); 

...

void bind_Format(object sender, ConvertEventArgs e) 
{ 
    int km = (int)e.Value; 

    e.Value = ConvertKMToMiles(km).ToString(); 
} 

void bind_Parse(object sender, ConvertEventArgs e) 
{ 
    int miles = int.Parse((string)e.Value); 

    e.Value = ConvertMilesToKM(miles); 
} 
+1

यह उल्लेख है कि यह तकनीक केवल परिदृश्यों जहां बाध्यकारी वस्तुओं का इस्तेमाल किया और संपर्क में हैं कवर किया जाएगा लायक है। यह ग्रिड और अन्य जटिल बाध्यकारी नियंत्रणों के साथ काम नहीं करेगा, बशर्ते कि उनके पास अपना स्वयं का प्रारूप/पार्स एपीआई न हो। इसलिए, दुर्भाग्यवश, WinForms डेटाबेस तंत्र के भीतर मूल्य परिवर्तकों का उपयोग करने का कोई भी "सामान्य" तरीका नहीं है। – Crono

5

एक और विकल्प फॉर्म के लिए एक विशिष्ट व्यूमोडेल होना है जो प्रारूप में डेटा को प्रदर्शित करने के लिए आवश्यक प्रारूप में डेटा का खुलासा करता है। आप आसानी से AutoMapper का उपयोग कर इसे प्राप्त कर सकते हैं और अपना खुद का Formatter बना सकते हैं।

इस तरह आप डिज़ाइनर के लिए भी पूर्ण समर्थन प्राप्त करेंगे।