假設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