我在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>
答案 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}}纯粹为了视图的目的,对对象进行类型化和整形。