使用复选框项从列表框中检索项目

时间:2012-03-01 02:15:32

标签: c# wpf xaml checkbox listbox

我正在创建一个WPF应用程序。我有一个带有复选框项目的列表框,我需要能够检索复选框的值是什么(用户是否检查过它们)。这是我的MainWindow代码。

    <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>

如何将这些复选框项目(徒步旅行,游泳等)作为bool数据类型添加到我的C#代码中?

更新 - 我尝试了“简单”的方法,认为它对我有用,但事实并非如此。 Justin说它虽然对他有用,所以现在这是我的代码。

<ListBox Name="lbFacilities" Grid.Row="3" Grid.Column="1" Height="85">
        <CheckBox Name="chbHiking">Hiking</CheckBox>
        <CheckBox Name="chbSwimming">Swimming</CheckBox>
        <CheckBox Name="chbSkiing">Skiing</CheckBox>
        <CheckBox Name="chbCamping">Camping</CheckBox>
        <CheckBox Name="chbLodging">Lodging</CheckBox>
    </ListBox>

然后在我的C#代码中

bool isHiking;
isHiking = chbHiking.IsChecked;

第二行分配isHiking给出错误,说chbHiking不存在。

3 个答案:

答案 0 :(得分:2)

查看data bindingdata templating,您需要创建一个具有布尔属性和要显示的字符串的项列表,然后将ListBox.ItemsSource绑定到该项并创建一个ItemTemplate创建了CheckBoxes IsCheckedContent绑定到您的商品。

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

答案 1 :(得分:0)

您有两种选择。

1)轻松

<CheckBox Name="cbHiking">Hiking</CheckBox>

在代码背后

bool isHiking = cbHiking.IsChecked;

2)更难 - 数据绑定

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

在代码背后(通常是视图模型)

private bool _myhiking;
public bool MyHiking {get {return _myhiking;} set {_myhiking = value;   //DoPropertyCHanged}

请注意,虽然我不建议这样做生产代码。我第一眼就错过了他们在列表框中的事实。最好的选择是使用CheckedListBox,然后将其绑定到包含描述(名称)的对象集合以及是否选中它们的值。

答案 2 :(得分:0)

我猜你只是想知道他们是否被检查过。如果是这样,那么你可以这样做:

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