我的DataGrid在XAML中定义:
<datagrid:ThemedDataGrid AutoGenerateColumns="False" ItemsSource="{Binding Model.ItemCollection, UpdateSourceTrigger=PropertyChanged}"
SelectionUnit="FullRow" SelectedItem="{Binding Model.DatagridSelectedItem, UpdateSourceTrigger=PropertyChanged}">
</datagrid:ThemedDataGrid>
我有一个事件RowEditEnding
,我在其中检查列中是否已存在具有先前输入的相同值的单元格。如果它存在,那么我需要取消编辑。我的RowEditEnding
方法如下:
int counter = 0;
Model.ItemCollection.ForEach(x =>
{
//if column is not empty
if (!String.IsNullOrEmpty(x.Name))
{
if (x.Name== Model.DatagridSelectedItem.Name)
{
counter++;
if (counter > 1)
{
MessageBox.Show("Doubled Name");
e.Cancel = true;
datagrid.CancelEdit(DataGridEditingUnit.Row);
}
}
}
});
问题在于这一行:
datagrid.CancelEdit()
不会将单元格值更改为前一个,并且我得到无限循环。我该如何解决?
答案 0 :(得分:3)
您的集合是否绑定到使用自定义对象填充的ItemsSource
属性?如果是这样,我认为您的自定义数据类必须实现IEditableObject接口。
确实来自DataGrid documentation:
为了保证可以正确提交和取消编辑, DataGrid中的对象必须实现IEditableObject接口。
答案 1 :(得分:0)
试着忽略这一点:
datagrid.CancelEdit(DataGridEditingUnit.Row);
在我看来,e.Cancel = true应该可以胜任。
答案 2 :(得分:0)
为您的类实现IEditableObject接口。它是一个ObservableCollection。(诊断是一个类,Name是属性)
% conda update nltk
答案 3 :(得分:0)