一尘不染

如何在可导航应用程序中支持与MVVM绑定的ListBox SelectedItems

c#

我正在制作一个可通过自定义“下一步”和“后退”按钮和命令(即不使用NavigationWindow)进行导航的WPF应用程序。在一个屏幕上,我有一个ListBox必须支持多种选择(使用Extended模式)。我有一个用于此屏幕的视图模型,并将选定的项目存储为属性,因为需要对其进行维护。

但是,我知道SelectedItemsa
的属性ListBox是只读的。我一直在尝试使用此解决方案来解决此问题,但是我无法将其采纳到我的实现中。我发现无法区分何时取消选择一个或多个元素以及何时在屏幕之间导航(NotifyCollectionChangedAction.Remove在两种情况下均会出现此问题,因为从技术上讲,从屏幕上导航时所有选定的项目均会取消选择)。我的导航命令位于单独的视图模型中,该模型管理每个屏幕的视图模型,因此我不能在其中放置与视图模型相关的任何实现ListBox

我发现了其他一些不太优雅的解决方案,但是这些解决方案似乎都没有在视图模型和视图之间执行双向绑定。

任何帮助将不胜感激。如果可以帮助理解我的问题,我可以提供一些源代码。


阅读 288

收藏
2020-05-19

共1个答案

一尘不染

尝试IsSelected在每个数据项上创建一个属性并绑定ListBoxItem.IsSelected到该属性

<Style TargetType="{x:Type ListBoxItem}">
    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
2020-05-19