我有一个相对简单的分层数据主 - 详细WPF窗口,使用MVVM开发,其中Window指向ViewModel,它将详细视图的ViewModel作为其属性之一公开:
Public Class MasterViewModel
Inherits ViewModelBase ' Contains an implementation of CommandSink
Private WithEvents _ViewerSelection As DetailViewModel
Public Property ViewerSelection As DetailViewModel
Set(value As DetailViewModel)
_ViewerSelection = value
RaisePropertyChanged("ViewerSelection")
End Set
Get
Return _ViewerSelection
End Get
End Property
ViewModelBase
包含Josh Smith的VMCommanding代码的实现,我使用Roslyn将其移植到Visual Basic。
窗口的XAML基本上看起来像这样,不相关的细节和许多结束括号被省略。
选择“主要”ListBox
中的项目会将“详细信息”DataContext
的{{1}}设置为相应的DetailViewModel。选择该列表框中的第二个项目会将“详细信息”框的ListBox
更改为所选内容的相应DetailViewModel。出于性能原因,选择后,DetailViewModel将保留并切换到“详细信息”框的DataContext
之内。
选择“详细信息”DataContext
中的项目会触发一个RoutedCommand,它应该被“Master”框中选择的ViewModel捕获。但是,ListBox
永远不会将焦点更改为正确的DetailViewModel;该命令始终由与第一个“主”ListBox选择对应的DetailViewModel捕获。
我需要做些什么不同的事情?
RoutedCommand
答案 0 :(得分:0)
我使用Prism库中的DelegateCommands
解决了这个问题。