Список с флажками - код, который видит каждый элемент IsChecked = true - PullRequest
0 голосов
/ 30 октября 2018

У меня есть WPF Listbox, который содержит список checkboxes, которые названы как имена других элементов управления в другом окне.

Когда listbox зацикливается, захватывая каждый элемент в lst_control.Items:

_details.controlIDs.Clear();

foreach(Control item in lst_controls.Items)
{
    if (item.IsChecked)

    //Add item to list
    _details.controlIDs.Add(item.controlID);
}

Код срабатывает при проверке / снятии отметки с любого из checkboxes в пределах listbox. Он видит каждый item.IsChecked как истинный - даже если он не отмечен.

EG: Установите флажок в списке сверху, он видит его как IsChecked = true, но он также подходит для всех остальных элементов управления в списке.

Странное поведение - кто-нибудь видел это раньше?

1 Ответ

0 голосов
/ 30 октября 2018

Даже если вы не собираетесь идти по полному маршруту MVVM, эту проблему лучше всего решить, разделив пользовательский интерфейс и слои данных в вашем приложении.

Создайте класс элемента данных, который включает логическое свойство IsSelected, и установите для ListBox ItemsSource набор (например, ObservableCollection) этих элементов. Для двухсторонней привязки данных класс элементов данных должен реализовывать INotifyPropertyChanged.

В вашем пользовательском интерфейсе создайте DataTemplate для свойства ListBox ItemTemplate, которое включает CheckBox, связанный с IsSelected.

Таким образом, вы можете сканировать коллекцию элементов данных (используя Linq или иным образом), чтобы найти те, которые выбраны.

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