2013-05-10 54 views
3

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

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

因此,即使强硬我有一个绑定到文本框的有效值,它看起来是无效的,因为扩展没有验证它。

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

回答

2

我做了什么来解决这个问题是一个处理程序添加到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(); 
     } 

如果有人有请给我一个更好的解决方案,谢谢!

+0

有趣的是,当文本值在加载控件之前被更改时,似乎TextChanged事件不会引发。我不知道它是否是平台中的错误。谢谢。我将把你的建议修复应用到工具箱中。 – 2013-05-11 06:15:06

+1

确保获得最新版本。 – 2013-05-11 06:20:35

+0

非常感谢Filip! – 2013-05-14 18:36:58