Остановить Datagrid, выбирающий первую строку по умолчанию - PullRequest
19 голосов
/ 19 августа 2010

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

Ответы [ 4 ]

38 голосов
/ 19 августа 2010

Убедитесь, что вы установили IsSynchronizedWithCurrentItem="True" и хотите ли вы, чтобы он был установлен одинаково?

<DataGrid IsSynchronizedWithCurrentItem="True" ... 

Если для этого свойства задано значение true, выбор первого элемента будетпо умолчанию, поведение.

11 голосов
/ 19 июля 2011

Скорее всего, ваша DataGrid связана с коллекцией, такой как PagedCollectionView, которая имеет свойство CurrentItem.Это свойство автоматически синхронизируется с выбранной строкой в ​​обоих направлениях.Решением было бы установить CurrentItem на ноль.Вы можете сделать это следующим образом:

PagedCollectionView pcv = new PagedCollectionView(collection);
pcv.MoveCurrentTo(null);
dataGrid.ItemsSource = pcv;

Это особенно полезно в Silverlight, у которого нет DataGrid.IsSynchronizedWithCurrentItem свойства ...

2 голосов
/ 30 мая 2017

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

<DataGrid IsSynchronizedWithCurrentItem="False" ... 

Интересует ли нас бит, а не его антагонист!

Чтобы добавить свою ценность: свойство IsSynchronizedWithCurrentItem=True означает, что сетка CurrentItem будет синхронизирована с текущим элементом коллекции. Установка IsSynchronizedWithCurrentItem=False - это то, что мы хотим здесь.

Для пользователей Xceed Datagrid (таких как я в этом случае) это будет SynchronizeCurrent=False

1 голос
/ 28 апреля 2016

Я пробовал несколько разных вещей, но мне помогло захватить первое событие выбора и «отменить» его, отменив выбор всех в сетке данных.

Вот код, чтобы сделать эту работу, я надеюсь, что это полезно для кого-то еще:)

/* 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 */
         }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...