WPF DataGrid: как очистить выделение программно? - PullRequest
9 голосов
/ 07 октября 2010

Это простая задача в другой сетке, но я не могу сделать это в WPF DataGrid.Существуют методы UnselectAll или UnselectAllCells, но они не работают.Кроме того, установка SelectedItem = null или SelectedIndex = -1 также не работает.

Здесь есть сообщение о полном отключении выбора, но это не то, что я хочу.Я просто хочу очистить текущий выбор (если есть) и установить новый выбор программно.

Ответы [ 4 ]

22 голосов
/ 01 августа 2013
dataGrid.UnselectAll()

Для режима строк

3 голосов
/ 07 октября 2010

Чтобы отменить текущий выбор, вы можете использовать этот код (поскольку вы видите, что он отличается от режима «Один» или «Расширенный»)

if(this.dataGrid1.SelectionUnit != DataGridSelectionUnit.FullRow)
    this.dataGrid1.SelectedCells.Clear();

if (this.dataGrid1.SelectionMode != DataGridSelectionMode.Single) //if the Extended mode
    this.dataGrid1.SelectedItems.Clear();
else 
    this.dataGrid1.SelectedItem = null;

Для программного выбора новых элементов используйте этот код:

if (this.dataGrid1.SelectionMode != DataGridSelectionMode.Single) 
{    //for example, select first and third items
    var firstItem = this.dataGrid1.ItemsSource.OfType<object>().FirstOrDefault();
    var thirdItem = this.dataGrid1.ItemsSource.OfType<object>().Skip(2).FirstOrDefault();

    if(firstItem != null)
        this.dataGrid1.SelectedItems.Add(firstItem);
    if (thirdItem != null)
        this.dataGrid1.SelectedItems.Add(thirdItem);
}
else
    this.dataGrid1.SelectedItem = this.dataGrid1.ItemsSource.OfType<object>().FirstOrDefault(); //the first item
1 голос
/ 11 января 2013
DataGrid.UnselectAllCells()

У меня работает.

1 голос
/ 16 марта 2012

Отключение и повторное включение DataGrid работало для меня.

...