wpf - 使用 SelectionMode = Multiple 对 ListBox 进行数据绑定(bind)

标签 wpf data-binding listbox

我有一个 WPF ListBox我想

  • ListBox 中启用多项选择, 和
  • 将 ListBox 数据绑定(bind)到我的 View 模型。

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

    我是否绑定(bind)到错误的控件属性?有没有办法将 XAML 中的多选 ListBox 绑定(bind)到 View 模型集合属性?谢谢你的帮助。

    最佳答案

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

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

    使用项目容器样式将列表框项目的 IsSelected 属性绑定(bind)到您正在显示的项目的 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>
    

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

    现在,每当列表框项被选中时,您的 View 模型都会知道它并可以根据需要更新其内部集合。

    关于wpf - 使用 SelectionMode = Multiple 对 ListBox 进行数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2511708/

    相关文章:

    wpf - 为什么这个扩展坞面板不起作用?

    c# - 分配当前单元格数据 GridView 时出现异常

    c# - Windows 应用商店应用程序数据将 TextBlock 绑定(bind)到来自 Web 服务的对象

    Delphi列表框拖放多个项目

    wpf - 在WPF中启用按钮,具体取决于ListBox.SelectedIndex

    WPF ListBox 虚拟化搞砸了显示的项目

    wpf - WPF 中的文本框绑定(bind)

    c# - 将数据从数据类传递到 View

    wpf - DataGridTemplateColumn 中的自定义控件

    c# - 有没有一种方法可以将 4 个控件分组到一个 UserControl 或模板中,并在父 UserControl 中使用它并将它们与 MVVM 绑定(bind)?