none
DataGrid Validation.Error 事件不响应 RRS feed

  • 问题

  • 我在一个DataGrid 上 注册了 Validation.Error 事件。 在绑定的对象上实现了IDataErrorInfo接口,在绑定中设置了NotifyOnValidationError="True",但是当我输入
    错误的数据后,DataGrid上注册的 Validation.Error事件并没有被引发。 请问是什么原因。 下面是代码。
    <DataGrid AutoGenerateColumns="False" Grid.Row="1" HorizontalAlignment="Stretch" Margin="0" Name="dataGrid1" VerticalAlignment="Stretch" 
             GridLinesVisibility="All" Background="#FFE5E9F2" BorderBrush="#FFE5A0EB" 
             AlternatingRowBackground="#FFD8C7C7" AlternationCount="1" CanUserResizeRows="False"
              SelectionMode="Single" 
             SelectionUnit="FullRow" 
             RowBackground="#FFE9EBCD" Validation.Error="dataGrid1_Error">
          <DataGrid.Columns>        
            <DataGridTemplateColumn>
              <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                  <TextBlock Text="{Binding Path=Age}"/>
                </DataTemplate>
              </DataGridTemplateColumn.CellTemplate>
              <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                  <TextBox>
                    <TextBox.Text>
                      <Binding Path="Age" NotifyOnValidationError="True">
                        <Binding.ValidationRules>
                          <DataErrorValidationRule ValidatesOnTargetUpdated="False" ValidationStep="UpdatedValue"/>
                        </Binding.ValidationRules>
                      </Binding>
                    </TextBox.Text>
                  </TextBox>
                </DataTemplate>
              </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
          </DataGrid.Columns>
        </DataGrid>
    class Person : IDataErrorInfo
      {
        public string Name { get; set; }
        public int Age { get; set; }
        public DateTime Birthday { get; set; }
        public string Address { get; set; }
        public bool Pass { get; set; }
        public string CountryCode { get; set; }
        public string ValueArr { get; set; }
    
        #region IDataErrorInfo 成员
    
        public string Error
        {
          get { throw new NotImplementedException(); }
        }
    
        public string this[string columnName]
        {
          get
          {
            if (columnName == "Age")
            {
              if (Age < 10) return "age <10";
            }
            return null;
          }
    
        }
    
        #endregion
      }
     private void dataGrid1_Error(object sender, ValidationErrorEventArgs e)
        {
          UIElement sourceElement = e.OriginalSource as UIElement;
        }
    2010年7月7日 4:38