【问题标题】:x:Bind Data Validationx:绑定数据验证
【发布时间】:2016-07-08 02:12:49
【问题描述】:

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

【问题讨论】:

    标签: validation data-binding inotifypropertychanged uwp-xaml


    【解决方案1】:

    您好,您可以通过两种方式绑定属性设置方法对其进行验证。像这样的:

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

    希望这会有所帮助。

    【讨论】:

    • 看起来它仍然在抛出异常,因为它期望 'value' 在它进来时是一个 'double'。
    • 请贴出你代码的相关部分和异常信息。
    【解决方案2】:

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

    转换器可以是这样的:

    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 中检查它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      相关资源
      最近更新 更多