如何将RoutedCommand转换为新的ViewModel?

时间:2012-07-06 00:15:40

标签: wpf xaml mvvm routed-commands

我有一个相对简单的分层数据主 - 详细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

1 个答案:

答案 0 :(得分:0)

我使用Prism库中的DelegateCommands解决了这个问题。