WPF DataGrid Binding и CheckBox - PullRequest
       2

WPF DataGrid Binding и CheckBox

2 голосов
/ 06 августа 2010

У меня есть фундаментальный вопрос:

Допустим, у меня есть список элементов некоторого класса. И у меня также есть DataGrid, который отображает свойства элементов этого списка. Я хочу, чтобы пользователь выбирал некоторые элементы через дополнительный столбец флажка (фактически, столбец данных). Затем он нажимает кнопку, и только выбранные элементы обрабатываются какой-либо функцией. Как мне реализовать логику этого флажка?

  1. Должен ли я добавить логическое свойство в свой класс и связать его со столбцом флажка? (Я думаю, нехорошо добавлять дополнительное свойство в мой базовый класс только ради пользовательского интерфейса)

  2. Должен ли я создать некоторый класс-оболочку, который имеет логическое свойство, и связать DataGrid со списком класса-оболочки? (Лучше соответствует правилам ООП, чем первый вариант)

  3. Сделать несвязанный столбец флажка. Затем проверьте строки таблицы данных в цикле, чтобы собрать выбранные элементы перед обработкой. (Это то, что я хотел сделать, но несвязанный столбец флажка ведет себя очень странно: когда я переключаю один флажок, переключаются также и несколько других. И я также не нашел способа просмотреть все строки DataGrid ).

  4. Ваш вариант ...

И я хочу сделать это в соответствии с правилами ООП. Это главное требование. Вот почему я не могу принять первый вариант, если вы не скажете мне, что он в порядке и обычно используется.

Ответы [ 3 ]

1 голос
/ 06 августа 2010

я голосую за # 2;это гели с шаблоном MVVM , который, я думаю, является единственным способом сделать прямую разработку в WPF.Таким образом, вы создадите класс модели представления, который обернет ваш объект домена для обработки связи между флажками и изменением свойств и т. Д., При этом все время запуская события PropertyChanged и поддерживая актуальность вашего пользовательского интерфейса.

0 голосов
/ 27 ноября 2012

ребята, я просто пробую это решение и отлично работаю, может быть, не самое лучшее, но оно работает.

bool? valor = false;
                foreach (var d in DetalleFactura.Items)
                {
                    DataGridRow row = (DataGridRow)DetalleFactura.ItemContainerGenerator.ContainerFromItem(d);
                    if (DetalleFactura.Columns[0].GetCellContent(row) is CheckBox)
                    {
                        valor = ((CheckBox)DetalleFactura.Columns[0].GetCellContent(row)).IsChecked;

                    }

                }
0 голосов
/ 06 августа 2010

Мы столкнулись с той же дилеммой и в конечном итоге получили вариант № 1 добавления логического свойства к классу IsSelected Почему? Когда это действительно сводилось к этому:

  • это было самое легкое
  • может быть переопределено для любого типа переплета
  • и наконец ... потому что Джош Смит использует IsSelected *

Конечно, это может нарушать некое золотое правило MVVM, но иногда правила должны нарушаться.

<ч />

* Я не могу вспомнить точный пример, предоставленный Джошем, но вы можете увидеть его использование в одной из его публикаций в блоге: Первоначально выбранный элемент при привязке к сгруппированному ICollectionView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...