我使用带有 CheckBox 作为 ItemTemplate 的 ComboBox,并且我想遍历所有项目,获取它们的选中状态并将它们的内容写入字符串(如果选中为真)。问题是我正在使用 SqlDataReader 从数据库中填充和绑定 ComboBox,但我找不到访问项目 IsChecked 属性的方法。
<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() + "";
}
}
}
但 cb 总是返回 NULL。我猜这与 IsChecked 属性绑定有关。
我想让这个工作,但我不想创建一个对象/类来填充组合框,因为我需要用数据库填充它。我真的很感激任何帮助。