C# DataGrid RowValidationRule获胜';组合框更改时不能调用
我想用RowValidationRule验证我的DataGrid,但是如果我在组合框中选择另一项,则不会调用ValidationRule 只有在更改DatagridTextColumn中的文本时,才会调用验证规则C# DataGrid RowValidationRule获胜';组合框更改时不能调用,c#,wpf,mvvm,wpfdatagrid,validationrules,C#,Wpf,Mvvm,Wpfdatagrid,Validationrules,我想用RowValidationRule验证我的DataGrid,但是如果我在组合框中选择另一项,则不会调用ValidationRule 只有在更改DatagridTextColumn中的文本时,才会调用验证规则 <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding SelectedFiles, UpdateSourceTrigger=PropertyChanged}" SelectedIndex="{Bindin
<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>
组合框包含FileType类型的枚举
在我看来,还有CellEditEnding方法
private void SelectedFilesDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
e.EditingElement.IsEnabled = false;
}
您没有CellEditingTemplate,因此该单元格永远不会进入编辑模式。如何使模板列能够正确编辑。我不知道“简单枚举”和复杂枚举之间有什么区别,所以我不能帮你。Thx为了快速回复,我采用了与你文章中相同的方式,不幸的是,它没有解决问题(RowValidationRule仍然没有调用更改)。关于“简单枚举”,我只是指一个普通枚举,因此我将其排除在post之外。RowValidationRule.Validate()在更改时被调用。我测试过了。你做了一些不同的事情。不要太有创意。只需按照我在回答中的方式设置模板,并确保组合框在未处于编辑模式时处于禁用状态。如果你不能让它工作,给我看你的代码的最新版本,我们会解决的。好的,显然我做错了一些关键的事情,我发布了上一个版本,如果你有时间发现问题的话。请把它放在你的问题中。
private void SelectedFilesDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
e.EditingElement.IsEnabled = false;
}