DataGrid RowValidationRule在组合框更改时不会被调用

时间:2018-05-24 15:05:52

标签: c# wpf mvvm wpfdatagrid validationrules

我想用RowValidationRule验证我的DataGrid,但如果我在组合框中选择另一个项目,则不会调用ValidationRule。

只有在我更改DatagridTextColumn中的文本时才会调用验证规则。

<DataGrid AutoGenerateColumns="False"
  ItemsSource="{Binding SelectedFiles, UpdateSourceTrigger=PropertyChanged}" 
  SelectedIndex="{Binding SelectedDataGridRow, UpdateSourceTrigger=PropertyChanged}"
 CellEditEnding="SelectedFilesDataGrid_CellEditEnding">

 <DataGrid.RowValidationRules>
   <valid:SaveComponentValidationRule ValidationStep="UpdatedValue"/>
 </DataGrid.RowValidationRules>

 <DataGrid.Resources>
  <DataTemplate x:Key="comboTemplate">
    <ComboBox IsSynchronizedWithCurrentItem="False" 
        ItemsSource="{Binding DataContext.FileDataTypes, ValidatesOnDataErrors=True,                             
             RelativeSource={RelativeSource AncestorType=local:SaveComponentView},UpdateSourceTrigger=PropertyChanged}"                                  
        SelectedValue="{Binding RelatedFileType, UpdateSourceTrigger=PropertyChanged}"      
        IsEnabled="{Binding IsEditing, RelativeSource={RelativeSource AncestorType=DataGridCell}}"/>
  </DataTemplate>                    
 </DataGrid.Resources>


 <DataGrid.Columns>                    
   <DataGridTextColumn  Header="File Name" Binding="{Binding Path=FileName, UpdateSourceTrigger=PropertyChanged}"/>
   <DataGridTemplateColumn Header="Data Type" 
      CellTemplate="{StaticResource comboTemplate}"                                             
      CellEditingTemplate="{StaticResource comboTemplate}" />
 </DataGrid.Columns>
</DataGrid>

datagrid的绑定SelectedFiles是一个ObservableCollection,它包含下面发布的类的对象。

public class SelectedFileModel 
{
  public FileType RelatedFileType {get; set;}
  public string FileName {get; set;}
  public string FilePath {get; set;} 
}  

组合框包含一个FileType类型的枚举。

我视图中的CellEditEnding方法。

private void SelectedFilesDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
  e.EditingElement.IsEnabled = false;
}

0 个答案:

没有答案