【问题标题】:WinRT XAML Toolkit TextBoxValidationExtension not validating on initiale binding in the ViewModelWinRT XAML 工具包 TextBoxValidationExtension 未验证 ViewModel 中的初始绑定
【发布时间】:2013-05-10 14:34:00
【问题描述】:

我在 MVVM 模式中使用 TextBoxValidationExtension。我在验证时遇到问题,因为我在调用 TextBoxFormatValidationHandler.Attach 方法之后调用的 NavigatedTo 方法中将绑定源设置为 TwoWay 模式。因此,第一次验证发生在将错误样式应用于文本框的文本框上的空值。

NavigatedTo 与文本框的 Text 属性的绑定没有触发 Textbox TextChanged 事件,因为根据我的理解,此时尚未加载 Textbox 控件。

所以即使我有一个绑定到文本框的有效值,它似乎也是无效的,因为扩展没有验证它。

     <TextBox Text="{Binding Path=ObjectXYZ.PropertyABC, Mode=TwoWay}"  
              extensions:TextBoxFocusExtensions.AutoSelectOnFocus="True"
              extensions:FieldValidationExtensions.Format="NonEmpty,Numeric">

【问题讨论】:

    标签: validation mvvm binding windows-runtime winrt-xaml-toolkit


    【解决方案1】:

    我为解决这个问题所做的就是向 WinRT 工具包 TextBoxFormatValidationHandler 添加一个处理程序,以处理 TextBoxFormatValidationHandler.Attach 方法中的文本框的加载事件:

     internal void Attach(TextBox textBox)
            {
                if (_textBox == textBox)
                {
                    return;
                }
    
                if (_textBox != null)
                {
                    this.Detach();
                }
    
                _textBox = textBox;
                _textBox.TextChanged += OnTextBoxTextChanged;
               _textBox.Loaded += _textBox_Loaded;
                this. Validate();
            }
    
            void _textBox_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
            {
                this.Validate();
            }
    

    如果有人有更好的解决方案,请告诉我,谢谢!

    【讨论】:

    • 有趣,确实,在加载控件之前更改 Text 值时似乎不会引发 TextChanged 事件。我想知道这是否是平台中的错误。谢谢。我会将您建议的修复应用到工具包中。
    • 确保获得最新版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多