c# - 获取列表框选定的项目

标签 c# wpf xaml mvvm listbox

我觉得这应该是一个简单的功能,但我不知道如何在不使用隐藏代码的情况下绑定(bind)到列表框中的所选项目。

我有一个带有包含复选框的数据模板的列表框。我想获取已检查/选定项目的列表。我该怎么做?

如果我无法获取 SelectedItems,我想绑定(bind)到每次选择某些内容时触发“SelectedProduct”的内容,以便我可以迭代“ProductList”并找到选中的项目。但是,每次我单击某个项目时,SelectedItem 不会触发。

这是我的代码:

<ListBox ItemsSource="{Binding ProductList}" SelectedItem="{Binding SelectedProduct}" SelectionMode="Multiple">
<ListBox.ItemTemplate>
    <DataTemplate>
        <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" Content="{Binding ID}" Margin="2"/>
    </DataTemplate>
</ListBox.ItemTemplate>

<ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsChecked}"/>
    </Style>
</ListBox.ItemContainerStyle>

最佳答案

一个正常的理性人会认为SelectedItems应该是可绑定(bind)的。但……事实并非如此。这很糟糕

您已经采用了通常的方法,将 IsSelected 绑定(bind)到数据对象中的属性,然后执行如下操作:

myCollection.Where(i => i.Selected);

根据MSDN如果模式设置为“Multiple”,SelectedItem 可以返回任何 选定项,因此其触发计时语义最多是未定义的。当选择的任何部分发生变化时获取通知将会很棘手,但您始终可以在 Selected 属性发生更改时运行逻辑(例如,引发一个事件VM 监听)。

关于c# - 获取列表框选定的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29237852/

相关文章:

c# - Xamarin 表单如何重叠?

c# - 我可以更改 C# 中的当前堆栈跟踪吗?

c# - 多个类和表单的样式/架构健全性检查

c# - WPF MVVM : INPC and mediating communication between view model & model

c# - WPF:自动截断 TextBlock 中的文本

c# - 为什么我不能在设计时在 XAML 中使用 CultureInfo.CurrentCulture?

c# - 地铁应用程序中的 ComboBox 如何获取所选文本及其相关 ID

c# - WCF COM 与复杂类型的互操作

c# - 警告尝试构建 Service Fabric AspNetCore2 项目

c# - 'MouseEventArgs' 不包含 'GetPosition' 的定义