C# 如何在WPF列表框中获取选中项?
我有一个WPF列表框,其中有复选框,但是如何获得选中的项目列表 列表框是绑定到C# 如何在WPF列表框中获取选中项?,c#,.net,wpf,C#,.net,Wpf,我有一个WPF列表框,其中有复选框,但是如何获得选中的项目列表 列表框是绑定到字典的数据 以下是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="
字典的数据
以下是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有一个关于代码的项目,可以解释您需要什么。他正在讨论一个TreeView
,但原则也将转移到复选框中
还有一种非常有趣的方法,使用DataTemplate
并将复选框.IsChecked
属性绑定到ListBoxItem.IsSelected
属性
如果你是MVVM的新手,你会有一个关于这个主题的精彩视频。它将引导您完成从使用代码隐藏文件到完整MVVM模式(包括依赖项注入和测试)的整个过程。谢谢,这很有用。但是如何在代码中实现这一点呢?你有任何例子或链接吗?我同意@voidalliner的链接。另一个链接(也是Josh Smith的一篇文章)是。特别是关于IsChecked,看看他们把ViewModel属性放在模型的什么地方,但是想法是一样的。我喜欢论坛链接,类图很棒。我还为我的答案添加了Jason Dolinger链接。我举了一个例子,说明了如果使用包装器,那么如何在WPF中轻松创建选中的列表框,通过查看集合和测试IsChecked属性可以很容易地判断哪些项被选中。