#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. Не могли бы вы прокомментировать, будет ли ваш ответ возможен при такой настройке, у меня возникают некоторые трудности с его пониманием.