2
我剛剛注意到,綁定到數字數據的WPF文本框不會發生發生非數字事件(如字母/空格鍵入或文本清除)時觸發Property Set
。當我試圖驗證文本框有一個有效的數字時,這成爲一個問題。如果用戶輸入5並按退格鍵,則數據綁定屬性保持爲5,而文本框顯示爲空!我無法停用按鈕來停止進一步的進度。無論如何,當綁定到數字數據時啓用非數字通知?或者,我不得不使用字符串屬性/數據轉換器?謝謝。如何觸發綁定到數字數據的文本框的屬性集
我剛剛注意到,綁定到數字數據的WPF文本框不會發生發生非數字事件(如字母/空格鍵入或文本清除)時觸發Property Set
。當我試圖驗證文本框有一個有效的數字時,這成爲一個問題。如果用戶輸入5並按退格鍵,則數據綁定屬性保持爲5,而文本框顯示爲空!我無法停用按鈕來停止進一步的進度。無論如何,當綁定到數字數據時啓用非數字通知?或者,我不得不使用字符串屬性/數據轉換器?謝謝。如何觸發綁定到數字數據的文本框的屬性集
如果您不喜歡默認轉換器,則需要創建自己的轉換器,如果輸入爲空或不可轉換,則返回有效值。
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>
這可能看起來有點混亂,但通常你實際上只是阻止程序的用戶。
我決定子類TextBox並重寫'OnTextChanged()'所以當this.Text爲空/空我將它設置爲「0」。既然你對默認轉換器可能是正確的,而你的代碼肯定能解決我的問題,不過,我會接受你的答案。謝謝。 – Pakman 2011-04-27 14:25:27
Subclassing TextBox聽起來像對我來說是巨大的矯枉過正,但對他們自己... – 2011-04-27 17:23:59
哈哈,不僅僅是爲了 - 它也允許我防止鍵入信件 – Pakman 2011-04-27 20:41:28