Хобрук: Ваш путь к мастерству в программировании

XamDataGrid - SelectedItems пуст при нажатии на редактируемую ячейку

Я заметил, что свойство SelectedItems XamDataGrid пусто, когда я нажимаю на редактируемую ячейку.

Если коллекция SelectedItems недоступна для редактирования, она отражает визуальную индикацию выбранных записей в сетке.

Это ошибка? Есть ли обходной путь для получения выбранных элементов, когда они были выбраны, щелкнув редактируемую ячейку?

Вот простой пример, отражающий такое поведение:

xaml:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <TextBox Name="TextBox1"></TextBox>
    <DataPresenter:XamDataGrid Grid.Column="1" Name="XamDataGrid" >
        <DataPresenter:XamDataGrid.FieldLayouts>
            <DataPresenter:FieldLayout>
                <DataPresenter:Field Name="FirstName" />
                <DataPresenter:Field Name="LastName" >
                    <DataPresenter:Field.Settings>
                        <DataPresenter:FieldSettings AllowEdit="False"/>
                    </DataPresenter:Field.Settings>
                </DataPresenter:Field>
            </DataPresenter:FieldLayout>
        </DataPresenter:XamDataGrid.FieldLayouts>
    </DataPresenter:XamDataGrid>
</Grid>

Код:

   public partial class MainWindow : Window
   {
      public MainWindow()
      {
         InitializeComponent();
         var persons = new List<Person>();
         persons.Add(new Person(){FirstName = "Jim",LastName = "Miller"});
         persons.Add(new Person(){FirstName = "James",LastName = "Bond"});
         XamDataGrid.DataSource = persons;
         XamDataGrid.SelectedItemsChanged += PrintNewSelection;
      }

      private void PrintNewSelection(object sender, SelectedItemsChangedEventArgs e)
      {
         foreach (ISelectableItem selectedItem in XamDataGrid.SelectedItems)
         {
            object item=null;
            if (selectedItem is Cell)
            {
               item = (selectedItem as Cell).Record.DataItem;

            }
            else if (selectedItem is DataRecord)
            {
               item = (selectedItem as DataRecord).DataItem;
            }
            TextBox1.Text += item + "\r\n";
         }
      }
   }

   internal class Person
   {
      public string FirstName { get; set; }
      public string LastName { get; set; }
      public override string ToString()
      {
         return FirstName + " " + LastName;
      }
   }

Если я нажму «Бонд», «Миллер», а затем «Джеймс», я получу следующее:

введите здесь описание изображения

Несмотря на то, что запись «Джеймс Бонд» отображается как выбранная, ее нет в коллекции SelectedItems.

Это очень раздражает, если вы показываете дополнительную информацию о выбранной записи.


Ответы:


1

Я также обратился в службу поддержки Infragistics, и их решение состояло в том, чтобы обработать событие EditModeStarting для сетки и установить для свойства IsSelected для ячейки значение true:

    private void XamDataGrid_EditModeStarting_1(object sender, EditModeStartingEventArgs e)
    {
        e.Cell.IsSelected = true;
    }
06.08.2013

2

Поведение, которое вы видите, ожидаемо, и запись активна только тогда, когда вы разрешаете войти в режим редактирования. Поскольку вы хотите отобразить дополнительную информацию о выбранной записи, я предполагаю, что вы хотите выбрать только одну запись и можете использовать ActiveRecord.

05.08.2013
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..