代码之家  ›  专栏  ›  技术社区  ›  David Veeneman

使用selectionMode=multiple数据绑定列表框

  •  13
  • David Veeneman  · 技术社区  · 14 年前

    我有水渍险 ListBox 我想要的

    • 在中启用多个选择 列表框
    • 将列表框数据绑定到我的视图模型。

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

    我是否绑定到错误的控件属性?是否有方法将XAML中的多选列表框绑定到视图模型集合属性?谢谢你的帮助。

    3 回复  |  直到 11 年前
        1
  •  21
  •   Aran Mulholland JohnnyAce    14 年前

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

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

    使用项容器样式将列表框项的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>
    

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

    现在,只要一个列表框项被选中,您的视图模型就会知道它,并且可以根据需要更新它的内部集合。

        2
  •  7
  •   David Veeneman    14 年前

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

        3
  •  0
  •   Community c0D3l0g1c    7 年前

    我已经发布了一种允许对 SelectedItems 属性,只需扩展我认为可以很容易地选择列表框的DataGrid。你可以在看到我的帖子 https://stackoverflow.com/a/16953833/62278