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

但是,我知道SelectedItemsListBox属性是只读的。我一直在尝试使用this solution here解决该问题,但是我无法将其应用于实现中。我发现无法区分何时取消选择一个或多个元素以及何时在屏幕之间导航(在两种情况下均会引发NotifyCollectionChangedAction.Remove,因为从技术上讲,离开屏幕导航时,所有选定的项目都会被取消选择)。我的导航命令位于一个单独的 View 模型中,该 View 模型管理每个屏幕的 View 模型,因此我无法在其中添加任何带有ListBox的 View 模型的实现。

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

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

最佳答案

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

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

07-24 09:47
查看更多