如何从列表框中选择复选框项目

时间:2012-08-08 03:24:34

标签: c# wpf checkbox listbox

我有一个列表框,其中的项目包含checkBoxes: 我想为用户选择的每个CheckBox获取字符串Content

            <ListBox Name="SendCodecsNamelistBox"
                     Height="52"
                     Margin="150,128,31,65"
                     ItemsSource="{Binding .}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <CheckBox Content="{Binding Path=.}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

2 个答案:

答案 0 :(得分:2)

您可以定义这样的模型

public class Model
{
    public string Content { get; set; }
    public bool IsSelected { get; set; }
}

并将其绑定到复选框

        <ListBox.ItemTemplate>
            <DataTemplate>
                <CheckBox Content="{Binding Path=Content}" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" />
            </DataTemplate>
        </ListBox.ItemTemplate>

        var data = new List<Model>()
        {
            new Model{ Content = "item1", IsSelected = false},
            new Model{ Content = "item2", IsSelected = false},
            new Model{ Content = "item1", IsSelected = false},
            new Model{ Content = "item3", IsSelected = false}
        };

        SendCodecsNamelistBox.ItemsSource = data;

然后你可以得到你想要的东西

var selectedContents = data.Where(i => i.IsSelected)
                           .Select(i => i.Content)
                           .ToList();

答案 1 :(得分:0)

这就是WPF和MVVM耦合在一起的原因。因为您可以在ItemsTemplate中放置任何内容,直接从GUI获取有关已检查项目的信息是一件痛苦的事。

ListBox绑定到具有IsChecked属性的视图模型集合,而不是将该属性绑定到CheckBox.IsChecked,您将从集合中获取已检查项目。