2011-06-21 8 views
33

IValueConverter इंटरफ़ेस में ConvertBack विधि का उपयोग क्या है।IValueConverter इंटरफ़ेस में कनवर्टबैक विधि का उपयोग क्या है?

जब यह कॉल करेगा?

या क्या Convert और ConvertBack विधि के आह्वान की आदेश है।

मैं यहाँ सवाल पूछने के लिए है क्योंकि: मैं पाठ बॉक्स का पाठ संपत्ति के लिए codebehind की एक संपत्ति के लिए बाध्य है और उस प्रॉपर्टी की convertor, का उपयोग कर

तो पहले Convert विधि आह्वान और जब मैं TEXTBOX कुछ भी नहीं में TEXT बदल ऐसा होता है लेकिन जैसे ही मैं फॉर्म ConvertBack विधि को बंद करता हूं।

यह क्या है, ऐसे कोई नियम कि जब आगConvertBack विधि को परिभाषित नहीं है?

नोट: आपको यह पता चल सकता है कि यह इस साइट पर अन्य प्रश्नों का डुप्लिकेट संभव है ... लेकिन जब मैं अपना प्रश्न लिखता हूं तो मुझे कोई सुझाव नहीं मिला है।

उत्तर

34

IMO, ConvertBack विधि विशिष्ट डेटा प्रकार के डेटा के अपने दृश्य प्रतिनिधित्व कन्वर्ट करने के लिए प्रयोग किया जाता है।

उदाहरण के लिए: आप एक बोरियन true स्ट्रिंग "TrueBoolean" में कनवर्ट करने के लिए कनवर्टर का उपयोग करते हैं। यह टेक्स्ट आपके टेक्स्टबॉक्स में प्रदर्शित होगा। जब आप टेक्स्टबॉक्स का मान बदलते हैं, तो ConvertBack विधि को बाध्यकारी आग के रूप में जल्द ही कॉल किया जाएगा (डिफ़ॉल्ट ऑनफोकसलोस्ट)। अब आपकी ConvertBack विधि नए मान को उस डेटाटाइप में बदलने की कोशिश करेगी, जिसे आप चाहते हैं। तो आपको "FalseBoolean" से false में कनवर्ट करने के लिए तर्क लागू करना होगा।

public class Converter : IValueConverter 
{ 
    object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return (bool) value ? "TrueBoolean" : "FalseBoolean"; 
    } 

    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var s = (string) value; 
     if (s.Equals("TrueBoolean",StringComparison.CurrentCultureIgnoreCase)) 
      return true; 
     if (s.Equals("FalseBoolean", StringComparison.CurrentCultureIgnoreCase)) 
      return false; 
     throw new Exception(string.Format("Cannot convert, unknown value {0}", value)); 
    } 
} 

अगर मैं गलत नहीं हूं तो इस तकनीक का उपयोग डेटाग्रिड्स में बहुत अधिक होता है।

आशा इस थोड़ा स्पष्ट है ...

अद्यतन
बारे में आप टिप्पणी में सवाल:

:
डिफ़ॉल्ट OnFocusLost बाध्यकारी व्यवहार आप अपने इस तरह बाध्यकारी बदलना होगा ओवरराइट करने के लिए
<TextBox Text="{Binding MyText, UpdateSourceTrigger=PropertyChanged}"/> 
<!--syntax might differ, can't access VS at the moment.--> 
+0

@ रोएल, हाँ, लेकिन मेरे मामले में कनवर्टबैक आग लग रहा है जब मैं खिड़की बंद कर रहा हूं, क्या यह अजीब नहीं है? –

+1

नहीं, मुझे लगता है कि यह सामान्य व्यवहार है: खिड़की बंद होने से पहले, टेक्स्टबॉक्स का ऑनफोकसलोस्ट ईवेंट निकाल दिया जाएगा, या कम से कम बाध्यकारी अपडेट हो जाएगा। – RoelF

+0

@ रोएल, यदि मुझे टेक्स्टबक्स के टेक्स्ट में कोई भी परिवर्तन करने के बाद मुझे कनवर्टबैक विधि कॉल करने की आवश्यकता है तो मुझे क्या करना चाहिए? मुझे अद्यतन स्रोत ट्रिगर संपत्ति नहीं मिली क्योंकि @ डोमिनिक कहते हैं ... –

3

अपने बाध्यकारी पर UpdateSourceTrigger संपत्ति की जांच करें। http://msdn.microsoft.com/library/system.windows.data.binding.updatesourcetrigger.aspx

टेक्स्टबॉक्स डिफ़ॉल्ट रूप से स्रोत अपडेट करता है यदि यह फोकस खो देता है, तो अद्यतन स्रोत स्रोत के उपयोग से आप पाठ व्यवहार को बदलते समय स्रोत के तत्काल अद्यतन पर इस व्यवहार को सेट कर सकते हैं।

HTH डोमिनिक

28

ConvertBack जब आपके पास बाध्यकारी पर mode=TwoWay है।

यह उपयोगकर्ता इनपुट को उस डेटाटाइप में परिवर्तित करता है जिसे आप बाध्यकारी करते हैं और TextBox (कहें) फोकस खो देता है।

उदाहरण के लिए (यदि यह नहीं बनाया गया था), यदि आपके पास कोई संख्या है जो मूल्य का प्रतिनिधित्व करती है, तो Convert विधि मूल्य लेती है और इसे सही मुद्रा प्रतीक, दशमलव विभाजक आदि के साथ एक स्ट्रिंग में प्रारूपित करती है

यदि उपयोगकर्ता एक नए मूल्य में टाइप करता है - जिसमें संभावित मुद्रा प्रतीक, हजारों विभाजक आदि शामिल हैं, तो आप स्ट्रिंग को पार्स करने और संख्यात्मक मान निकालने के लिए ConvertBack विधि का उपयोग करेंगे।

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

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