Я использую ComboBox с CheckBox как ItemTemplate, и я хочу перебирать все элементы, получать их статус проверки и записывать их содержимое в строку, если отмечено true. Проблема в том, что я использую SqlDataReader для заполнения и привязки ComboBox из базы данных, и я не могу найти способ доступа к свойствам IsChecked.Итерации через элементы ComboBox при использовании CheckBox в качестве ItemTemplate
<ComboBox>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Click="CheckBox_Click" Content="{Binding}" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" Tag="{RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Я попытался отливать детали ComboBox как CheckBoxes на события нажатия из них так:
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < myComboBox.Items.Count; i++)
{
CheckBox cb = (myComboBox.Items[i] as CheckBox);
if (cb.IsChecked == true)
{
myString += "," + myComboBox.SelectedItem.ToString() + "";
}
}
}
но центибар всегда возвращает NULL. Я предполагаю, что это связано с привязкой свойства IsChecked.
Я бы хотел, чтобы это работало, но я не хочу создавать объект/класс для заполнения combobox, потому что мне нужно, чтобы он был заполнен базой данных. Я бы очень признателен за любую помощь.
ах, это было навсегда, так как я сделал это, но я довольно уверен, что проблема в том, что дерево управления и логическое дерево отличаются, поэтому я думаю, что вам нужно искать элемент управления. Чтобы упростить вашу жизнь, просто используйте привязку данных и создайте свой собственный тип, и просто установите свойство на свой тип равным true. –
Не обрабатывайте элементы пользовательского интерфейса в процедурном коде в WPF. Для этого и предназначен XAML. Обработайте это на уровне ViewModel. –
Не перебирайте флажки. Итерации через ItemsSource Combobox – Shoe