2015-11-13 4 views
7
<!-- View --> 
    <TextBox Text="{Binding str, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 

    // View Model 
    private string _str; 
    public string str 
    { 
     get { return _str; } 
     set 
     { 
      if (!value.Contains("a")) 
       _str = value; 

      OnPropertyChanged(nameof(str)); 
     } 
    } 

टाइपिंग जब पाठ बॉक्स में टाइप मैं इसे बाहर कोई अमान्य वर्ण फेंक करना चाहते हैं (इस नमूने मामले में पत्र 'एक' है, लेकिन यह वास्तव में कुछ के लिए हो सकता है)। उदाहरण के लिए:UWP पाठ बॉक्स बाइंडिंग TwoWay का सम्मान न जब

  1. उपयोगकर्ता प्रकार 'एफडी' एक का पता लगाता है एक 'एक'
  2. str द्वारा पीछा किया, तो यह 'fdsa' के लिए _str निर्धारित नहीं करता है, यह 'एफडी' पर रखते हुए लेकिन वैसे भी घटना को जन्म देती है 'ए' को फेंकने के दृष्टिकोण को इंगित करने के लिए।
  3. डब्ल्यूपीएफ में, इसका परिणाम 'एफडीएस' युक्त टेक्स्टबॉक्स में होता है। यूडब्लूपी में, इसका परिणाम टेक्स्टबॉक्स में गलत रूप से 'fdsa' होता है।

ऐसा प्रतीत होता है कि जब नियंत्रण पर ध्यान केंद्रित किया जाता है तो यूडब्ल्यूपी में, यह दोवे बाध्यकारी का सम्मान नहीं करेगा।

मैं एक बटन बना सकता हूं जिसमें एक क्लिक ईवेंट है जो दबाए जाने पर मेरे टेक्स्टबॉक्स को सही तरीके से अपडेट करेगा।

private void btn_Click(object sender, RoutedEventArgs e) 
    { 
     OnPropertyChanged(nameof(str)); 
    } 

हम कई ViewModels है कि हम दोनों WPF और UWP विचारों में उपयोग करने की आवश्यकता है, और हम हर जगह यह आवश्यक व्यवहार किया है। इस समस्या का अच्छा समाधान क्या है?

* संपादित करें *

वापस सप्ताह के अंत के बाद समस्या के पास आया और यह अपने आप तय कर दी है लगता है। मुझे कोई जानकारी नहीं है की क्यों। मैं अभी के लिए सवाल बंद कर रहा हूँ।

+0

मुझे लगता है कि यूडब्लूपी से संबंधित एक तरह की समस्या है, मुझे लगता है कि बहुत से लोग यूपीपी पर दो तरह से बाध्यकारी शिकायत करते हैं, मैंने डेस्कटॉप एप्लिकेशन पर एक परीक्षण किया और ठीक काम करता है। शायद एक कनवर्टर आपकी मदद कर सकता है। –

+0

मुझे लगता है कि जब तक मैं स्पष्ट रूप से UpdateSourceTrigger = PropertyChanged – Saxar

+0

सेट करता हूं, तो क्या यह कभी पता चलता है कि यह क्यों हुआ? मुझे यह समस्या है। – user3007447

उत्तर

1

आप अपनी समस्या का समाधान करने के लिए एक कनवर्टर का उपयोग कर सकते हैं, तो आप एक बेहतर कनवर्टर विस्तृत कर सकते हैं, मेरे उदाहरण में मैं सिर्फ अपने विचार को प्रदर्शित करने के लिए एक मूर्ख कनवर्टर का उपयोग करता हूं।

कनवर्टर:

public class Converter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value != null) 
     { 
      var someString = value.ToString(); 
      return someString.Replace("a", ""); 
     } 

     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value; 
    } 
} 

XAML

<TextBox Text="{Binding Str, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource converter}}"/> 

तुम भी एक संलग्न व्यवहार इस्तेमाल कर सकते हैं।

+1

मैंने पहले देखा था कि आप WPF के बारे में उन प्रश्नों के WPF उत्तर पोस्ट करते हैं जो WPF के बारे में नहीं हैं। प्रश्न टैग पर ध्यान देने का प्रयास करें, अपने आप सहित सभी को बहुत समय बचाता है। –

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