WPF - 对Sub ViewModel的MVVM命令绑定

时间:2009-09-16 13:46:37

标签: wpf mvvm binding prism command

我有一个具有NotesViewModel子ViewModel的VehicleViewModel

public IManageVehicleNotesViewModel NotesViewModel { get; set; }

在第一次激活VehicleViewModel时,我激活了子ViewModel。

NotesViewModel.Activate();

激活调用一个方法来初始化一些命令,我​​已经断了这个并且它被调用了。

CreateCommand = new DelegateCommand<object>(OnCreateCommand, CanCreate);

然而,虽然TextBoxes绑定在子视图上(因此DataContext已到位)没有任何命令是绑定的 - 我试图在命令上调用RaiseCanExecuteChanged但它们不禁用,启用或调用方法如预期的那样。

我不知道它是否相关(因为TextBoxes是绑定的)但是我正在使用ResourceDictionary将View和ViewModel关联起来......

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:v="clr-namespace:GTS.GRS.N3.Modules.Vehicles.Views"
    xmlns:vm="clr-namespace:GTS.GRS.N3.Modules.Vehicles.Model">
  <DataTemplate DataType="{x:Type vm:ManageVehicleViewModel}">
    <v:ManageVehicleView />
  </DataTemplate>
  <DataTemplate DataType="{x:Type vm:ManageVehicleNotesViewModel}">
    <v:ManageVehicleNotesView />
  </DataTemplate>
</ResourceDictionary>

顶级VehicleViewModel上的命令工作。

有没有人经历过这样的事情?这是我正在做的事情吗?任何帮助都感激不尽!

干杯,

安迪

2 个答案:

答案 0 :(得分:2)

CreateCommand属性是否会触发PropertyChanged事件?如果没有,则在分配时不会通知用户界面...

尝试使用Snoop之类的工具来检查按钮的Command属性是否已设置

答案 1 :(得分:0)

执行此操作并检查输出以查看发生的情况:

<UserControl …
     xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase" />

<Button Command="{Binding MyCommand, 
                  diagnostics:PresentationTraceSources.TraceLevel=High}" … />

它应该报告它实际尝试绑定的对象,等等。在运行时检查输出窗口,看看该绑定发生了什么。