假设CarId是int
,而不是string
你可能收到出现FormatException。如果您创建IValueConverter
并将其添加到绑定中,您可以防止发生异常。
问题是,当您输入一个CarId及其一个数字时,WPF可以绑定它并将其设置为虚拟机中的值。但下一次,当值无效(意味着不可转换为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(ofcourse替换成您的命名空间):
xmlns:converter="clr-namespace:Client.ViewModels.Converters"
然后:
<converter:FallbackConverter x:key="FallbackConverter "/>
<TextBox Text="{Binding Path=Car.CarId, Mode=TwoWay, Converter={StaticResource FallbackConverter}}"/>
有你在Car类中实现了'INotifyPropertyChanged'吗? –
CarId是什么类型?诠释? –
如果carid是int - 那么当你清除你的文本框时你的setter不会被打。使用带验证的字符串类型将是最简单的方法 – blindmeis