Обновление текущего свойства BindingSource с помощью свойства SelectedItem Datagrid?

#c# #wpf #datagrid #highlight #bindingsource

#c# #wpf #datagrid #выделить #bindingsource

Вопрос:

Есть ли способ синхронизировать текущее свойство элемента BindingSource с выбранным элементом Datagrid? Например, я нажимаю на строку 10 в Datagrid, когда нажимаю кнопку для вызова BindingSource.MoveNext() затем установка Datagrid.Выбранный элемент с помощью BindingSource.Текущее; выделенная строка является строкой 2 вместо 11.

Я делаю это неправильно? Я просто хочу, чтобы datagrid выделял следующую строку после операции (например, обновлял строку, на которую я нажал), но Datagrid, похоже, не предлагает способа сделать это, и мне остается иметь дело с BindingSource.

Ответ №1:

При нажатии на определенную строку в DataGridView присваивается Position свойству BindingSource объекта соответствующее значение вместо присвоения выбранной строки для DataGridView .

Комментарии:

1. К сожалению, BindingSource. Current — это только средство получения — вы не можете его установить.

2. Ах да… Что ж, я рассмотрел эти два варианта, за исключением того, что элемент управления Datagrid в WPF Toolkit (насколько мне известно, Datagridview отсутствует) не имеет возможности отображать целое число с индексом строки (без использования некоторых взломов, то есть), чего требует Position. Если только вы не знаете чего-то, чего не знаю я!

3. Подождите минутку. В конце концов, это было просто. Существует функция SelectedIndex! Также возвращает целое число! 😀

4. простым способом синхронизации был бы мой ответ ниже. там вы можете легко сказать myview . MoveToPrevious() или myview. moveToNext () и выбранный вами элемент сделают это 🙂 вообще нет настройки индекса

Ответ №2:

если вы хотите, чтобы ваша datagrid и ваша коллекция были синхронизированы, вы должны установить IsSynchronizedWithCurrentItem = true для вашей datagrid. ваша коллекция должна иметь тип ICollectionView или BindingListCollectionView. вы можете достичь этого с помощью

 this.view = CollectionViewSource.GetDefaultView(this.mysourcecollection)
  

если вы сделаете это, ваши selecteditems всегда будут синхронизированы. И вы можете использовать moveTo -методы вашего ICollectionView для пошагового просмотра ваших элементов.

если у вас есть дополнительные вопросы, просто оставьте несколько комментариев

Редактировать:

если вы используете таблицы данных в качестве источника коллекций, просто создайте свойство типа BindingListCollectionView .

 public BindingListCollectionView MyView
{ get;set;}
  

после инициализации вашего datatable инициализируйте BindingListCollectionView таким образом:

  this.MyView = (BindingListCollectionView )CollectionViewSource.GetDefaultView(this.mydatatable);
  

затем просто используйте это представление в качестве ItemsSource для вашей datagrid

 <DataGrid ItemsSource="{Binding MyView}" IsSynchronizedWithCurrentItem="true" />
  

что вы можете сделать сейчас, так это вызвать:

 this.MyView.MoveCurrentToFirst();
this.MyView.MoveCurrentToLast();
this.MyView.MoveCurrentToNext();
this.MyView.MoveCurrentToPrevious();
//and some other
  

Комментарии:

1. Для моего элемента управления DataGrid в форме WPF установлен DataContext, равный BindingSource, для источника данных которого задано значение Datatable. Не могли бы вы прокомментировать, будет ли ваш ответ возможен при такой настройке, у меня возникают некоторые трудности с его пониманием.