如何在WPF中获取ListView的Checked行值

时间:2012-10-20 08:04:09

标签: c# wpf xaml

我在WPF应用程序中有ListView CheckBox

我想保存WPF列表中所有已检查行的值...

我怎样才能做到这一点?

我的列表视图

<ListView x:Name="listViewChapter" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderThickness="0" SelectionMode="Single" Height="100" Margin="22,234,17,28" Grid.Row="1">
    <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" >
                    <Label Name="lblChapterID" VerticalAlignment="Center"  Margin="0" Content="{Binding ChapterID}" Visibility="Hidden" />
                    <CheckBox Name="chkChapterTitle" VerticalAlignment="Center" Margin="0,0,0,0" Content="{Binding ChapterTittle}" Checked="chkChapterTitle_Checked" />
                </StackPanel>
            </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

2 个答案:

答案 0 :(得分:7)

您可以将IsChecked属性直接绑定到ListViewItem的IsSelected。使用RelativeSource绑定到元素。

IsChecked="{Binding RelativeSource={RelativeSource AncestorType=ListViewItem},Path=IsSelected}"

现在,如果您对ListView使用SelectionMode=Multiple,则可以使用SelectedItems直接提取选中的项目。

var chapters = new List<Chapter>();
foreach (var item in listViewChapter.SelectedItems)
    users.Add((Chapter)item);

答案 1 :(得分:0)

您应该考虑使用MVVM pattern作为WPF应用程序,if you're going to use MVVM then you'll want an MVVM framework

然后,创建一个代表你的数据绑定对象的类型(例如Book),然后在你的视图模型上有一个这种类型的集合(例如ObservableCollection<Book> Books)。

然后,您将Selected布尔属性(例如Book类型)绑定到ListBox ItemTemplate中CheckBox的IsChecked属性。

<CheckBox IsChecked="{Binding Selected}" />

您可能不希望使用纯粹用于UI(Book)的属性来规范您的域对象(Selected),因此您可以创建一个BookViewModel类型来扩充{Book 1}}纯粹为了视图的目的,对对象进行类型化和整形。