2015-11-13 72 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)); 
     } 
    } 

時,當在文本框中鍵入我想把它扔掉任何無效字符(在此示例情況下,字母「A」,但真會是任何東西)。例如:UWP文本框不尊重雙向綁定打字

  1. 用戶類型「FDS」後面是「A」
  2. STR檢測,所以它不設置_STR爲「FDSA」,將其保持在「FDS」但無論如何,引發事件以表示拋棄'a'。
  3. 在WPF中,這會導致包含'fds'的文本框。在UWP中,這導致錯誤地包含'fdsa'的文本框仍然存在。

看來,在UWP中,當一個控件擁有焦點時,它將不會遵守TwoWay綁定。

我可以創建一個按鈕,該按鈕有一個Click事件,按下後會正確更新我的TextBox。

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

我們有我們需要在WPF和UWP意見使用很多的ViewModels,我們有這個要求的行爲得到處都是。什麼是解決這個問題的好方法?

*編輯*

又重新回到了週末後的問題,它似乎已經解決了自身。我不知道爲什麼。我現在正在討論這個問題。

+0

我認爲是一種與UWP相關的問題,我看到很多人抱怨uwp上的雙向綁定,我在桌面應用上做了一個測試,並且工作正常。也許一個轉換器可以幫助你。 –

+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的問題。儘量關注問題標籤,爲每個人節省很多時間,包括你自己。 –