KirillMB
@KirillMB

Как сделать динамический список CheckBox в WPF ?

Добрый вечер.

Есть список List<KeyValuePair<di, string>> _regionsList; в нем хранится id и название региона.
Как эти данные отобразить в ListBox в виде CheckBox с Content названием региона?
И как сделать так чтобы можно было поставить N галочек.
  • Вопрос задан
  • 5511 просмотров
Решения вопроса 1
@Sumor
В простейшем случае это должно выглядеть где-то так:
XAML:
<ListBox x:Name="lst">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding Value}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

В коде, например:
lst.ItemsSource = new List<KeyValuePair<int, string>>()
{
    new KeyValuePair<int, string>(1, "1"),
    new KeyValuePair<int, string>(2, "2"),
};

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

Лучше использовать для отображения объект у которого есть логическое свойство, например IsChecked, и его привязать к IsChecked CheckBox.
Например:
Класс:
class MyClass
{
    public int id { get; set; }
    public string Name { get; set; }
    public bool IsChecked { get; set; }
}

XAML:
<ListBox x:Name="lst">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding Name}" IsChecked="{Binding IsChecked}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Добавление элементов:
lst.ItemsSource = new List<MyClass>()
{
    new MyClass(){id=1, Name="1"},
    new MyClass(){id=2, Name="2"},
};

В таком случае отметка пользователем галочки сразу отражается в привязанном списке и можно легко получить список отмеченных:
foreach(var tObj in (lst.ItemsSource as List<MyClass>).Where(myObj => myObj.IsChecked))
    MessageBox.Show(tObj.Name);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы