Я использую Wpf Toolkit DataGrid. Всякий раз, когда я присваиваю ему Itemssource, его первый элемент выбирается и вызывается событие selectionChanged. Как я могу остановить его, чтобы выбрать любую строку по умолчанию?
Стоп Datagrid по умолчанию выбирает первую строку
Ответ 1
Убедитесь, что вы установили IsSynchronizedWithCurrentItem="True"
, и вам нужно, чтобы он был установлен одинаково?
<DataGrid IsSynchronizedWithCurrentItem="True" ...
Если для этого свойства установлено значение true, выбор первого элемента является поведением по умолчанию.
Ответ 2
Скорее всего, ваш DataGrid привязан к коллекции, такой как PagedCollectionView, которая имеет свойство CurrentItem. Это свойство автоматически синхронизируется с выбранной строкой в обоих направлениях. Решение было бы установить для CurrentItem значение null. Вы можете сделать это следующим образом:
PagedCollectionView pcv = new PagedCollectionView(collection);
pcv.MoveCurrentTo(null);
dataGrid.ItemsSource = pcv;
Это особенно полезно в Silverlight, у которого нет свойства DataGrid.IsSynchronizedWithCurrentItem...
Ответ 3
Я пробовал несколько разных вещей, но для меня работала, чтобы захватить первое событие выбора и "отменить", отменив выбор всех в datagrid.
Здесь код, чтобы сделать эту работу, я надеюсь, что это выгодно для кого-то еще:)
/* Add this inside your window constructor */
this.myDataGrid.SelectionChanged += myDataGrid_SelectionChanged;
/* Add a private boolean variable for saving the suppression flag */
private bool _myDataGrid_suppressed_flag = false;
/* Add the selection changed event handler */
void myDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
/* I check the sender type just in case */
if (sender is System.Windows.Controls.DataGrid)
{
System.Windows.Controls.DataGrid _dg = (System.Windows.Controls.DataGrid)sender;
/* If the current item is null, this is the initial selection event */
if (_dg.CurrentItem == null)
{
if (!_myDataGrid_suppressed_flag)
{
/* Set your suppressed flat */
_dgRateList_suppressed_flag = true;
/* Unselect all */
/* This will trigger another changed event where CurrentItem == null */
_dg.UnselectAll();
e.Handled = true;
return;
}
}
else
{
/* This is a legitimate selection changed due to user interaction */
}
}
}
Ответ 4
Ответ HCL верен, но для быстрых и незаметных читателей, таких как я, это показалось мне непонятным, и я в конечном итоге потратил немного времени на изучение других вещей, прежде чем вернуться сюда и внимательно прочитать.
<DataGrid IsSynchronizedWithCurrentItem="False" ...
Этот бит нам интересен, а не его антагонист!
Чтобы добавить свое значение:
свойство IsSynchronizedWithCurrentItem=True
означает, что сетка CurrentItem
будет синхронизирована с текущим элементом коллекции. Настройка IsSynchronizedWithCurrentItem=False
- это то, что мы хотим здесь.
Для пользователей Xceed Datagrid (например, я был в этом случае), это будет SynchronizeCurrent=False