我的UWP应用程序中有几个文本框绑定到浮动属性(双向)。我使用编译绑定。在这个时候,没有自己的"代码隐藏"对于这些文本框。现在我遇到了应用程序在简单的错误拼写上崩溃的问题(例如,如果用户键入字母而不是数字)。我想知道如何在不修改生成的代码的情况下处理这些异常。
<TextBox Text="{x:Bind ViewModel.QtyGoodEntered, Mode=TwoWay}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="1" FontSize="36" x:Name="QtyGoodTextBox"/>
当尝试将字母转换为浮动时,应用程序崩溃。
case 33: // Views\ProdFeedbackView.xaml line 191
this.obj33 = (global::Windows.UI.Xaml.Controls.TextBox)target;
(this.obj33).LostFocus += (global::System.Object sender, global::Windows.UI.Xaml.RoutedEventArgs e) =>
{
if (this.initialized)
{
// Update Two Way binding
this.dataRoot.ViewModel.QtyGoodEntered = (global::System.Double) global::Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(global::System.Double), this.obj33.Text);
}
此致 尼尔斯
答案 0 :(得分:0)
好的,我有以下选择。
由于时间不够,我坚持使用转换器解决方案,但我认为TextBoxMask属性值得一试。在我看来,捕获UnhandledException是最糟糕的解决方案。 这就是我的转换器的样子。如果发生异常,则内容默认为0.0。这就是我所需要的一切。
public class StringToDoubleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
try
{
return System.Convert.ToString((double)value);
}
catch
{
return "";
}
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
try
{
return System.Convert.ToDouble((string)value);
}
catch
{
return 0.0;
}
}
}
那就是XAML部分
<TextBox Text="{x:Bind ViewModel.QtyGoodEntered, Mode=TwoWay, Converter={StaticResource StringToDoubleConverter}}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="1" FontSize="36" x:Name="QtyGoodTextBox"/>