2016-07-08 116 views
0

我在Windows通用应用程序中使用x:BindINotifyPropertyChanged将类属性绑定到嵌入在ListView控件中的TextBox。该类属性的类型为double,我想阻止用户输入string。我遇到的问题是,使用双向数据绑定时,在用户输入无效输入时,我可以处理它之前会抛出异常。x:绑定数据验证

回答

0

嗨,你可以验证它在你的双向bindig属性设置方法。这样的事情:

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)); 
    } 
} 

希望这会有所帮助。

+0

我试过了,但它仍然会抛出异常。 – DCB2524

+0

它看起来仍然在抛出异常,因为它预计'价值'是一个'双',当它来。 – DCB2524

+0

请张贴您的代码的相关部分和异常消息。 –

0

我不能写评论,所以:在绑定中使用值转换器怎么样? TextBox控件只接受字符串作为它的值,所以如果你想在你的ViewModel/Code-Behind中使用双精度值,你需要使用一个值转换器来将TextBox的字符串值解析为双精度值,反之亦然。

转换器可以是这样的:

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; 
     } 
    } 
} 

进行验证,你可以定义一系列“有效价值”,并检查了您的视图模型时的性能变化