【发布时间】:2015-12-02 19:50:52
【问题描述】:
我是 C# 的新手,我已经有一段时间遇到这个问题了。我有一个名为“listBox”的列表框,它绑定到一个项目集合,该集合有超过 100 个复选框,每个复选框都有不同的内容(或复选框标签)。
我正在尝试遍历每个复选框,如果选中,则将内容打印到控制台中。我能够检测是否检查了某些内容,但绝对不是最有效的方法。请参阅下面的代码:
private void SomeButton_Click(object sender, RoutedEventArgs e)
{
string checkState = "";
for (int i = 0; i < listBox.Items.Count - 1; i++)
{
checkState = listBox.Items[i].ToString().Substring(listBox.Items[i].ToString().Length - 5, 5);
if (checkState != "False")
{
Console.WriteLine("Item " + i + " is checked");
}
}
}
此代码确实适用于检测是否检查了某些内容。但是,如果我能够从 ItemsCollection 中的复选框中获取实际的真/假属性,效率会更高。我已经尝试了多种方法来尝试获取选中状态以及复选框内容,但遗憾的是,我每次尝试都变得枯燥无味。以下是我尝试从这些复选框之一获取内容的一些内容:
Console.WriteLine(listBox.Items[i].ToString());
Console.WriteLine(listBox.Items.GetItemAt(i).ToString());
Console.WriteLine(listBox.Items.GetItemAt(i).Equals(0).ToString());
任何帮助将不胜感激。
【问题讨论】:
-
感谢@CoderForHire 的快速响应。这看起来可以让我获得选中状态,但不能让我获得复选框内容。此外。我将 tat question 的答案复制到我的列表框中,但我收到了一个错误的标记错误。
<ListBox.ItemTemplate> <DataTemplate> <CheckBox Content="{Binding .}" IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Path=IsSelected" /> </DataTemplate> </ListBox.ItemTemplate>
标签: c# wpf xaml checkbox listbox