【问题标题】:Get ListBox SelectedItems获取 ListBox SelectedItems
【发布时间】:2015-05-28 01:44:13
【问题描述】:

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

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

如果我无法获得 SelectedItems,我想绑定到每次选择某些东西时触发“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>

【问题讨论】:

    标签: c# wpf xaml mvvm listbox


    【解决方案1】:

    一个正常理性的人会认为SelectedItems 应该是可绑定的。除了……不是。这糟透了

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

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

    根据MSDNSelectedItem 可以返回any如果模式设置为“Multiple”选择的项目,所以它的触发时间语义充其量是未定义的。当中的任何 em>部分的选择变化时,收到通知将棘手,但是当Selected property更改时,您始终可以运行逻辑(例如,引发VM侦听的事件)。

    【讨论】:

      【解决方案2】:

      您可以使用交互扩展:

      使用引用向导添加对 System.Windows.Interactivity.dll 的引用,在扩展部分中搜索。

      然后在您的 xaml 中包含以下命名空间:

       xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
      

      你可以这样做:

      <ListBox x:Name="FooList">
          <i:Interaction.Triggers>
              <i:EventTrigger EventName="SelectionChanged" >
                  <i:InvokeCommandAction Command="{Binding FooCommand}" CommandParameter="{Binding SelectedItems, ElementName=FooList}" />
              </i:EventTrigger>
          </i:Interaction.Triggers>
      </ListBox>
      

      在您的 ViewModel 中创建一个获取当前选定项目的 ICommand。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-17
        • 2015-04-15
        • 1970-01-01
        • 2015-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多