【问题标题】:Binding ObservableCollection to selected items of a ListBox将 ObservableCollection 绑定到 ListBox 的选定项
【发布时间】:2015-08-19 18:58:03
【问题描述】:

经过数小时的谷歌搜索,我仍然找不到一个简单的解决方案,可以在 TwoWay 模式下将 ObservableCollection 绑定到 ListBox 的选定项目...

我所拥有的非常简单:ListBoxSelectionMode="Multiple",以及一个名为 SelectedContactsObservableCollection<Contact>。我希望这两个被绑定。当然我的ListBoxItemsSource="{Binding Contacts}" 这是另一个ObservableCollection 的联系人。

现在我真的不能在我的 Contact 项目上使用 IsSelected bool,我就是不能。

谢谢!

【问题讨论】:

  • 当然可以。这就是存在视图模型的原因。将您的联系人项目包装到视图模型中。

标签: c# wpf mvvm


【解决方案1】:

没有简单的解决方案。不能绑定SelectedItems

最佳解决方案是将您的 Contact 项目选择到具有 IsSelected 属性的视图模型对象中,绑定到该对象,然后在需要时对主 OC 运行查询获取选中的项目集合。

既然您说您不能/不会这样做,那么下一个最佳解决方案可能是在您的代码隐藏中处理 SelectionChanged 并从那里手动更新 VM 集合。

【讨论】:

  • 最佳解决方案的主要问题是我从 API 获取所有 Contact 项目,因此每次重新加载我的联系人时,我都会丢失 IsSelected 属性值和 @987654327 @清空。在不破坏 MVVM 模式的情况下,我无法找出解决方案(简单与否)...
  • @Lucaribou 将这些项目选择到一个单独的对象中,并在保存时重新选择它们。这有意义吗?
  • 谢谢@BradleyDotNET,它成功了,我仍然认为SelectedItems 是ListBox 体系结构中的一个缺陷,但是我只是不认为它可以做到。
  • @Lucaribou 这是一个缺陷,但有几篇文章解释了为什么要使其可绑定如此困难(这就是他们没有这样做的原因)。
【解决方案2】:

由于SelectedItems 不是DependencyProperty,您不能使用绑定

但是有一个解决方案,看看这个帖子: http://blogs.microsoft.co.il/miziel/2014/05/02/wpf-binding-listbox-selecteditems-attached-property-vs-style/

【讨论】:

  • 其实这是附加属性过度使用的一个很好的例子。
  • 我知道SelectedItems,但我正在寻找类似的解决方案,就好像它是DependencyProperty,我要看看这篇文章。谢谢。
【解决方案3】:

另一个选项是不跟踪 ViewModel 中的选定项目。相反,当您尝试执行某些操作时,请将它们作为 UI 中的 CommandParameter 传递。

例子:

<ListBox x:Name="MyListBox" 
         ItemsSource="{Binding SomeCollection}" />
<Button Command="{Binding SomeCommand}" 
        CommandParameters="{Binding SelectedItems, ElementName=MyListBox}" />

【讨论】:

    猜你喜欢
    • 2012-12-16
    • 2014-09-28
    • 2018-09-11
    • 2013-12-31
    • 1970-01-01
    • 2013-10-15
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多