我正在制作一个WPF应用程序,可以通过自定义的“下一步”和“上一步”按钮和命令进行导航(即不使用NavigationWindow
)。在一个屏幕上,我有一个需要支持多选(使用Extended
模式)的ListBox
。我为这个屏幕创建了一个视图模型,并将所选项存储为属性,因为它们需要被保留。
然而,我知道ListBox
的SelectedItems
属性是只读的。我一直在尝试使用这里的解决方案解决这个问题,但我无法将其纳入我的实现。我发现我无法区分何时取消选择了一个或多个元素,还是当我在屏幕之间导航时(NotifyCollectionChangedAction.Remove
在两种情况下都会被引发,因为在导航离开屏幕时,技术上所有所选项目都将被取消选择)。我的导航命令位于一个单独的视图模型中,该视图模型管理每个屏幕的视图模型,因此我不能将与ListBox
的视图模型相关的任何实现放在那里。
我发现了其他几个不太优雅的解决方案,但这些解决方案似乎都没有强制执行视图模型和视图之间的双向绑定。
如果有帮助理解我的问题,我可以提供一些源代码。任何帮助都将不胜感激。
RaisePropertyChangedEventHandler
的分派程序处,BindableCollection
构造函数会抛出一个InvalidOperationException
。我尝试在catch块中使用Dispatcher.BeginInvoke
放置一个try/catch块,但是当页面导航回来时,列表项不会重新选择。 - kck