2011-04-25 74 views
2

我剛剛注意到,綁定到數字數據的WPF文本框不會發生發生非數字事件(如字母/空格鍵入或文本清除)時觸發Property Set。當我試圖驗證文本框有一個有效的數字時,這成爲一個問題。如果用戶輸入5並按退格鍵,則數據綁定屬性保持爲5,而文本框顯示爲空!我無法停用按鈕來停止進一步的進度。無論如何,當綁定到數字數據時啓用非數字通知?或者,我不得不使用字符串屬性/數據轉換器?謝謝。如何觸發綁定到數字數據的文本框的屬性集

回答

0

如果您不喜歡默認轉換器,則需要創建自己的轉換器,如果輸入爲空或不可轉換,則返回有效值。

public class IntBindingConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value.ToString(); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     string input = value as string; 
     if (String.IsNullOrWhiteSpace(input)) 
     { 
      return 0; 
     } 
     else 
     { 
      int outInt; 
      if (int.TryParse(input, out outInt)) 
      { 
       return outInt; 
      } 
      else 
      { 
       return 0; 
      } 
     } 
    } 
} 

用法示例:

<TextBox> 
    <TextBox.Text> 
     <Binding Path="Max"> 
      <Binding.Converter> 
       <vc:IntBindingConverter/> 
      </Binding.Converter> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

這可能看起來有點混亂,但通常你實際上只是阻止程序的用戶。

+0

我決定子類TextBox並重寫'OnTextChanged()'所以當this.Text爲空/空我將它設置爲「0」。既然你對默認轉換器可能是正確的,而你的代碼肯定能解決我的問題,不過,我會接受你的答案。謝謝。 – Pakman 2011-04-27 14:25:27

+0

Subclassing TextBox聽起來像對我來說是巨大的矯枉過正,但對他們自己... – 2011-04-27 17:23:59

+0

哈哈,不僅僅是爲了 - 它也允許我防止鍵入信件 – Pakman 2011-04-27 20:41:28

相關問題