मैं अपने द्वारा बनाए गए उपयोगकर्ता नियंत्रण का परीक्षण करने के बीच में हूं, और मुझे ऐसा कुछ मिल रहा है जो मेरे लिए अतुलनीय है।बाइंडिंग पर नो-ऑप कनवर्टर डालने का व्यवहार क्यों बदलता है?
नियंत्रण कॉम्बोबॉक्स का एक विस्तार है जो एक विशिष्ट कस्टम प्रकार के मानों को संभालता है। इसमें उस कस्टम प्रकार की निर्भरता संपत्ति है जो बाध्यकारी की लक्षित संपत्ति है।
मुझे सेटटर में एक ट्रेस स्टेटमेंट मिला है, और मैं देख सकता हूं कि संपत्ति सेट हो रही है। लेकिन यह मेरे उपयोगकर्ता नियंत्रण में नहीं दिख रहा है।
अब, आमतौर पर मैं कहूंगा, ठीक है, मेरे उपयोगकर्ता नियंत्रण में मुझे एक बग मिला है। मैं शायद ऐसा करता हूं, हालांकि मैं इसके बारे में परेशान हूं। लेकिन यह सवाल मेरे नियंत्रण में बग खोजने के बारे में नहीं है। पढ़ते रहिये; यहां वह अजीब हो जाता है।
मैं भी बिया Stollnitz के कम मूल्य कनवर्टर का उपयोग कर रहा डिबग मदद करने के लिए बाइंडिंग:
public class DebuggingConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value; // Add the breakpoint here!!
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException("This method should never be called");
}
}
इसके पीछे विचार है कि मैं अपने बाइंडिंग को यह कनवर्टर जोड़ सकते हैं और देखने के लिए क्या मूल्य है एक ब्रेकपाइंट सेट कर सकते हैं लक्ष्य के लिए बाहर धकेल दिया जा रहा है। ठीक है, यह ठीक काम करता है। मैं देख सकता हूं कि मूल्य धक्का दिया जा रहा है।
वास्तव में, यह भी ठीक काम करता है। यदि डिबगिंग कनवर्टर बाध्यकारी से जुड़ा हुआ है, तो उपयोगकर्ता नियंत्रण मान प्रदर्शित करता है। यदि ऐसा नहीं है, तो यह नहीं है।
यह भी कैसे संभव है? एक मूल्य कनवर्टर कैसे कुछ भी बाध्य नियंत्रण के व्यवहार को प्रभावित नहीं कर सकता है?
संपादित करें:
ऐसा नहीं है कि यह मदद करने के लिए होने की संभावना है, लेकिन यहां उपयोगकर्ता नियंत्रण के लिए XAML है:
<a:CodeLookupBox
Grid.Column="1"
Grid.IsSharedSizeScope="True"
MinWidth="100"
Style="{Binding Style}">
<a:CodeLookupBox.CodeLookupTable>
<Binding Path="Codes" Mode="OneWay"/>
</a:CodeLookupBox.CodeLookupTable>
<a:CodeLookupBox.SelectedCode>
<Binding Path="Value" Mode="TwoWay" ValidatesOnDataErrors="True"/>
</a:CodeLookupBox.SelectedCode>
</a:CodeLookupBox>
दूसरा बंधन पर कनवर्टर के बिना, नियंत्रण बर्ताव करता है जैसे कि मैं नहीं था SelectedCode
सेट नहीं है। भले ही OnSelectedCodePropertyChanged
हैंडलर में एक ट्रेस स्टेटमेंट दिखाता है कि e.Value
में वास्तव में सही मान होता है। यह कनवर्टर संलग्न है या नहीं, भले ही यह होता है।
मैं इस समस्या को एक विचार प्रयोग के साथ उलटा करने की कोशिश कर रहा हूं: यदि आप एक बाध्य उपयोगकर्ता नियंत्रण बनाना चाहते हैं जिसका व्यवहार बदल गया है तो यदि कोई बाध्यकारी से कोई-ऑप कनवर्टर संलग्न नहीं होता है, तो आप इसे कैसे करेंगे? मैं जवाब के साथ आने के लिए बाध्यकारी के बारे में पर्याप्त नहीं जानता।
यह बहुत दिलचस्प है:
संपादित
यहाँ संपत्ति घोषणाओं की तरह लग रही है। किसी भी तरह से आप बाइंडिंग दिखाने के लिए वहां कुछ एक्सएएमएल पेस्ट कर सकते हैं? –
यह एक अच्छा सवाल है। मेरे पास कोई जवाब नहीं है, लेकिन मुझे पता है कि बीए की साइट पर पोस्ट डिबगिंग बाइंडिंग के बारे में कुछ और सलाह देता है। जब आप कनवर्टर का उपयोग नहीं कर रहे हैं तो क्या कोई अपवाद फेंक दिया गया है? –
क्षमा करें मैं आपकी मदद नहीं कर सकता, लेकिन +1 कारण है कि डिबगिंग कनवर्टर एक अच्छा विचार है (भले ही यह आपका विचार न हो)। –