C# 隐藏WPF双向绑定对话错误
我想将DataRowView绑定到windows上的控件 初始化代码:C# 隐藏WPF双向绑定对话错误,c#,wpf,xaml,C#,Wpf,Xaml,我想将DataRowView绑定到windows上的控件 初始化代码: ... row = query.DefaultView[0]; DataContext = row; XAML: 当文本框失去焦点时,它会尝试更新一行。有时它会失败,因为Price列是整数。但与其抛出错误,不如将其写入调试控制台: System.Windows.Data错误:7:ConvertBack无法转换值 'dfddf'(类型'String')。绑定表达式:路径=价格; DataItem='DataRowView
...
row = query.DefaultView[0];
DataContext = row;
XAML:
当文本框失去焦点时,它会尝试更新一行。有时它会失败,因为Price列是整数。但与其抛出错误,不如将其写入调试控制台:
System.Windows.Data错误:7:ConvertBack无法转换值
'dfddf'(类型'String')。绑定表达式:路径=价格;
DataItem='DataRowView'(HashCode=35888470);目标元素是
“文本框”(名称=“”);目标属性为“Text”(类型为“String”)
FormatException:'System.FormatException:
如何使这一错误重见天日?如何接住它并投掷?为什么它会默默地掩盖一个异常而吞下这个错误
我知道它可以通过绑定中的字段格式规范来解决。我会写的,但我仍然不想有一个救生圈来保护我免受突然的谈话错误。可能WPF不会抛出这些错误,因为不可能捕捉到它们。但是,在本例中,ViewModel价格值没有更改,因此无需担心无效值。您可以尝试使用验证(当异常以静默方式触发时,应该用红色包围文本框) 控制行为的方法是使用所需的逻辑定义自己的转换器:
public class IntToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int price = (int)value;
return price.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string text = (string)value;
int price;
if (!int.TryParse(text, out price))
{
MessageBox.Show("Enter valid value for Price!");
return 0; //Some default value
}
return price;
}
}
在这种情况下,如果price不是有效的int,它将被0替换。您也可以抛出异常,但这将使整个应用程序崩溃
另一种方法是将此逻辑设置到特定的文本框控件或ViewModel端(将Price type设置为string并在ViewModel中管理转换)
public class IntToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int price = (int)value;
return price.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string text = (string)value;
int price;
if (!int.TryParse(text, out price))
{
MessageBox.Show("Enter valid value for Price!");
return 0; //Some default value
}
return price;
}
}