我有一個數據綁定文本框在我的應用程序,如下所示:(類型的Height
是decimal?
)斯特朗驗證在WPF
<TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged,
ValidatesOnExceptions=True,
Converter={StaticResource NullConverter}}" />
public class NullableConverter : IValueConverter {
public object Convert(object o, Type type, object parameter, CultureInfo culture) {
return o;
}
public object ConvertBack(object o, Type type, object parameter, CultureInfo culture) {
if (o as string == null || (o as string).Trim() == string.Empty)
return null;
return o;
}
}
配置這種方式,任何非空字符串不能在轉換爲十進制結果驗證錯誤將立即突出顯示文本框。但是,TextBox仍可能失去焦點並保持無效狀態。我想要做的是:
- 不允許TextBox失去焦點,直到它包含有效值。
- 將文本框中的值還原爲最後一個有效值。
這樣做的最好方法是什麼?
更新:
我已經找到了一種方法來做到#2。我不喜歡它,但它的作品:
private void TextBox_LostKeyboardFocus(object sender, RoutedEventArgs e) {
var box = sender as TextBox;
var binding = box.GetBindingExpression(TextBox.TextProperty);
if (binding.HasError)
binding.UpdateTarget();
}
有沒有人知道如何做到這一點更好? (或做#1)