[英]How to get checked items in a WPF ListBox?
我有一個WPF ListBox,我有復選框,但是獲取被檢查項目列表的方法是什么?
ListBox是綁定到Dictionary<T>
。
這是XAML:
<Window x:Class="WpfApplication.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
Height="300"
Width="300">
<Grid Margin="10">
<ListBox ItemsSource="{DynamicResource Nodes}" Grid.IsSharedSizeScope="True" x:Name="MyList">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="Key" />
<ColumnDefinition SharedSizeGroup="Name" />
<ColumnDefinition SharedSizeGroup="Id" />
</Grid.ColumnDefinitions>
<CheckBox Name="NodeItem" Click="OnItemChecked">
<StackPanel Orientation="Horizontal">
<TextBlock Margin="2" Text="{Binding Value.Name}" Grid.Column="1"/>
<TextBlock Margin="2" Text="-" Grid.Column="2"/>
<TextBlock Margin="2" Text="{Binding Value.Id}" Grid.Column="3"/>
</StackPanel>
</CheckBox>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
這通常通過ViewModel完成,ViewModel是一種數據結構,它向模型(您的數據)和特定於視圖的信息(如是否檢查項目)公開視圖(通過DataContext)。
在你的例子中,你的詞典不會是一個詞典,而是一個詞典,而PersonViewModel則有一個IsChecked屬性和一個指向模型的Person屬性。
否則,您必須在模板中找到復選框或從復選框中轉到列表框項目,這很復雜。
Josh Smith有一篇關於codeproject的文章 ,應該解釋你需要什么。 他正在討論TreeView
但原理也將移植到CheckBox
。
這里還有一個非常有趣的方法,使用DataTemplate
並將CheckBox.IsChecked
屬性綁定到ListBoxItem.IsSelected
屬性。
如果您是MVVM的新手 , Jason Dolinger有一個關於這個主題的精彩視頻。 它將引導您完成從使用代碼隱藏文件到完整MVVM模式(包括依賴注入和測試)的過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.