使用SelectionMode = Multiple数据绑定ListBox

Dav*_*man 13 data-binding wpf listbox

我有一个ListBox我想要的WPF

  • ListBox和中启用多项选择
  • 将ListBox数据绑定到我的视图模型.

这两个要求似乎不相容.我的视图模型有一个ObservableCollection<T>绑定到此ListBox 的属性; 我在XAML中设置了从属性到ListBox.SelectedItems属性的绑定.当我编译时,我得到一个错误,说该SelectedItems属性是只读的,无法从XAML设置.

我绑定到错误的控制属性?有没有办法将XAML中的多选ListBox绑定到视图模型集合属性?谢谢你的帮助.

Ara*_*and 22

你可以做些什么来解决这个问题:

在列表中显示的项目上创建IsSelected属性.我假设这些也由视图模型表示.所以添加一个额外的属性不应该是一个戏剧.如果它们只是业务对象,请考虑使用包装类将它们无痛地包装在视图模型项中(无耻的插件 - 是一个这样的系统.我每天使用它来包装我的业务对象)

使用项容器样式将列表框项的IsSelected属性绑定到正在显示的项的IsSelected属性,如此

    <ListBox.ItemContainerStyle>
       <!-- This Style binds a ListBoxItem to a the ViewModelItem. -->
       <Style
          TargetType="{x:Type ListBoxItem}">
          <Setter
             Property="IsSelected"
             Value="{Binding IsSelected, Mode=TwoWay}" />
       </Style>
    </ListBox.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

(可能需要基于样式的属性,不确定)

现在,只要选择了列表框项,您的视图模型就会知道它并可以根据需要更新其内部集合.


Dav*_*man 7

我最终在SelectionChanged事件处理程序中使用了一些代码隐藏来设置视图模型属性.比创建对象包装器更简单.