Как выборочно отключить редактирование в DataGrid?


По умолчанию редактирование активируется F2, двойным щелчком мыши и вводом в выделенную ячейку. Как я могу включить / отключить эти (некоторые из них) триггеры редактирования?

2 2

2 ответа:

datagrid.KeyDown += new KeyEventHandler(datagrid_KeyDown);

void datagrid_KeyDown(object sender, KeyEventArgs e)
    {
        //obviously you'll have to add some code here
        //if(!datagridIsInEditMode) then
            if (Keyboard.IsKeyDown(Key.F2))
                   datagrid.BeginEdit();
            else
                  e.Handled = true;
    }

Я думаю, что самый чистый способ-оставить поведение datagrid в покое, оно знает, что делает,и создать свой собственный контроль в шаблоне edting. Давайте назовем его (для справки) CustomTextBox. Пусть этот CustomTextBox делает то, что вам нравится, например, отвечает только на клавишу F2 и т. д. Таким образом, вы не создаете странные поведения в datagrid и не инкапсулируете пользовательские поведения в свой пользовательский элемент управления.

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock DataContext="{Binding SomeProperty}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <yourNamespace:CustomTextBox DataContext="{Binding SomeProperty}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>