如何从列表框中获取已检查的项目

时间:2013-05-05 08:11:31

标签: .net wpf vb.net checkbox listbox

我是WPF的新手并试图动态地向ListBox添加一些复选框项目,然后点击按钮我试图从列表框中获取选中的项目。但问题是没有检查项目被提取。以下是列表框的代码

<ListBox HorizontalAlignment="Left" Margin="39.714,179,0,364.318" Name="ListBox1" Width="234" FontSize="16" SelectionMode="Multiple">

            <ListBox.BitmapEffect>
                <DropShadowBitmapEffect />
            </ListBox.BitmapEffect>
            <ListBoxItem>
                <CheckBox Content="Bleeding" Name="CheckBox1"></CheckBox>
            </ListBoxItem>
            <ListBoxItem>
                <CheckBox Content="Bruising or Discoloration" Name="CheckBox2"></CheckBox>
            </ListBoxItem>
<DataTemplate>
                <CheckBox Content="{Binding .}" IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" />
            </DataTemplate>
        </ListBox>

以及如何获取这些已检查项目的代码:

Dim l As New List(Of String)
For Each l1 As ListBoxItem In ListBox1.SelectedItems
    l.Add(l1.Content)
Next

我也提到了这些问题:How to get selected items from listbox has checkboxes in WPF?How to remove checked items from a listbox in WPF?

但没有找到任何解决方案。请告诉我如何实现这一目标。

1 个答案:

答案 0 :(得分:1)

选中该复选框并未选择该项目,这就是您无法获得预期行为的原因。

您可以将复选框的IsChecked属性绑定到列表框项的IsSelected属性。为此,每个复选框上的绑定应为:

IsChecked="{Binging IsSelected, 
                    RelativeSource={RelativeSouce FindAncestor,
                                                  AncestorType={x:Type ListBoxItem}},
                    Mode="TwoWay"}"