C# 从包含复选框项的列表框中检索项

C# 从包含复选框项的列表框中检索项,c#,wpf,xaml,checkbox,listbox,C#,Wpf,Xaml,Checkbox,Listbox,我正在创建一个WPF应用程序。我有一个包含复选框项目的列表框,我需要能够检索复选框的值(无论用户是否选中它们)。这是我的主窗口代码 <ListBox Name="lbFacilities" Grid.Row="3" Grid.Column="1" Height="85"> <CheckBox>Hiking</CheckBox> <CheckBox>Swimming</CheckBox>

我正在创建一个WPF应用程序。我有一个包含复选框项目的列表框,我需要能够检索复选框的值(无论用户是否选中它们)。这是我的主窗口代码

    <ListBox Name="lbFacilities" Grid.Row="3" Grid.Column="1" Height="85">
        <CheckBox>Hiking</CheckBox>
        <CheckBox>Swimming</CheckBox>
        <CheckBox>Skiing</CheckBox>
        <CheckBox>Camping</CheckBox>
        <CheckBox>Lodging</CheckBox>
    </ListBox>
第二行指定isHiking时出错,表示chbHiking不存在。

查看和,您将要创建一个项目列表,其中包含一个布尔属性和一个要显示的字符串,然后将绑定到该项并创建一个,该项将创建
复选框
IsChecked
内容
绑定到您的项目

然后,您可以查看源集合中的属性值。

您有两个选项

1) 轻松的

2) 硬数据绑定

<CheckBox Name="cbHiking" IsChecked="{Binding Path=MyHiking}">Hiking</CheckBox>

请注意,尽管我不建议对生产代码采用这种方式。乍一看,我没有注意到它们在列表框中。最好的选择是使用CheckedListBox,然后将其绑定到包含描述(名称)和是否选中的值的对象集合

我猜你只是想知道它们是否被检查过。如果是,则可以执行以下操作:

foreach (var item in lbFacilities.Items)
{
    CheckBox cb = item as CheckBox;
    bool thisCBCheckedValue = cb.IsChecked;
}

啊,我从没想过给他们起名字!谢谢,我想这就是我想要的解决办法。编辑-事实上,这对我不起作用。我得到一个错误,我的代码中不存在“cbrapping”。我只是自己运行了这个,没有问题。你能更新你的代码吗?我也会这样做+1。我忽略了复选框在列表框中的事实。出于某种原因,我看到了一个堆栈面板(请注意再次玩把戏)。感谢您的回复。我一点也不明白,但我会努力调查一下。我真的以为会有一个像tsells建议的更简单的方法,但似乎没有。@user1241563:最简单的方法不一定是最好的,因为从长远来看可能有缺点。当您习惯了绑定和数据模板后,使用它们会变得很简单,而且会得到回报。我理解这一点,并感谢您的投入。然而,这是一个我只上了一个半月课的作业。我对C#编程非常陌生,我不觉得我的教授会在这项作业中实现如此复杂的东西,因为我们还没有讨论过。我觉得我忽略了一个更简单的方法。@user1241563:教授WPF。。。至少在我看来,这是一个多么疯狂的想法。好吧,对于一个作业,你可能会捏造它,但WPF都是关于数据绑定和模板的,所以如果你想高效地工作,迟早你应该学习它。你在问题中发布的内容应该有效,你把c#code放在了哪里?顺便说一句,如果你不需要选择项目,请使用
ItemsControl
。它应该是chbHiking.IsCheckedI大写的IsChecked,它仍然说chbHiking在当前上下文中不存在。就像测试一样,如果您试图访问代码中的LBFacility,会发生什么?如果某些东西接线不正确,那么这将产生相同的错误。
<CheckBox Name="cbHiking">Hiking</CheckBox>
bool isHiking = cbHiking.IsChecked;
<CheckBox Name="cbHiking" IsChecked="{Binding Path=MyHiking}">Hiking</CheckBox>
private bool _myhiking;
public bool MyHiking {get {return _myhiking;} set {_myhiking = value;   //DoPropertyCHanged}
foreach (var item in lbFacilities.Items)
{
    CheckBox cb = item as CheckBox;
    bool thisCBCheckedValue = cb.IsChecked;
}