我在Windows Universal App中使用x:Bind
和INotifyPropertyChanged
将类属性绑定到TextBox
控件中嵌入的ListView
。 class属性的类型为double
,我想阻止用户输入string
。我遇到的问题是,使用双向数据绑定时,在用户输入无效输入之前我会处理它之前会抛出异常。
答案 0 :(得分:0)
您好,您可以在双向bindig属性set方法中验证它。像这样:
private double number;
public double Number
{
get
{
return number;
}
set
{
double tempNumber;
if (double.TryParse(value.ToString(), out tempNumber))
{
number = value;
}
else
{
number = 0.0;
}
RaisePropertyChange(nameof(Number));
}
}
希望这有帮助。
答案 1 :(得分:0)
我无法写评论,那么:在绑定中使用值转换器怎么样? TextBox控件只接受字符串作为其值,因此如果你想在ViewModel / Code-Behind中使用double,则需要使用一个值转换器将TextBox的字符串值解析为double,反之亦然。
转换器可以是这样的:
public class DoubleToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return value.ToString()
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
var parsed = false;
var parsedValue = 0.0;
if (double.TryParse(value.ToString(), out parsedValue)
{
return parsedValue;
}
else
{
return -1.0;
}
}
}
对于验证,您可以定义一系列"有效值"当属性发生变化时,在ViewModel中查看它