Подтвердить что ты не робот

Стоп Datagrid по умолчанию выбирает первую строку

Я использую Wpf Toolkit DataGrid. Всякий раз, когда я присваиваю ему Itemssource, его первый элемент выбирается и вызывается событие selectionChanged. Как я могу остановить его, чтобы выбрать любую строку по умолчанию?

4b9b3361

Ответ 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