假设 CarId 是一个int
而不是string
你可能会收到一个 FormatException。如果您创建一个IValueConverter
并将其添加到绑定中,则可以防止异常。
问题是当您输入 CarId 及其数字时,WPF 可以绑定它并将其设置为 VM 中的值。但是下一次,当值无效时(意味着不能转换为int
)将不会被设置(WPF mscorelib.dll 中发生异常),意味着旧值仍然存在。在这种情况下,永远不会调用属性设置器。
像这样的东西:
public class FallbackConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int v = 0; // default if no value provided or value is not convertible to int
if (value != null)
{
var result = int.TryParse(value.ToString(), out v);
}
return v;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string result = string.Empty;
if (value != null)
{
result = value.ToString();
}
return result;
}
}
在 XAML 中(当然替换为您的命名空间):
xmlns:converter="clr-namespace:Client.ViewModels.Converters"
然后:
<converter:FallbackConverter x:key="FallbackConverter "/>
<TextBox Text="{Binding Path=Car.CarId, Mode=TwoWay, Converter={StaticResource FallbackConverter}}"/>