我有一个 VehicleViewModel,它有 NotesViewModel 的子 ViewModel

public IManageVehicleNotesViewModel NotesViewModel { get; set; }

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

NotesViewModel.Activate();

激活调用一个方法来初始化多个命令,我已经断点了这个方法及其被调用。

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

然而,尽管 TextBox 绑定在子视图上(因此 DataContext 就位),但没有任何命令绑定 - 我尝试在命令上调用 RaiseCanExecuteChanged 但它们不会按预期禁用、启用或调用方法。

我不知道它是否相关(因为文本框是绑定的),但我使用 ResourceDictionary 关联视图和 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 上的命令有效。

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

干杯,

安迪

有帮助吗?

解决方案

是否 CreateCommand 属性触发 PropertyChanged 事件 ?如果没有,当您分配它时,用户界面将不会收到通知...

尝试使用类似的工具 史努比 检查是否 Command 按钮的属性已设置

其他提示

执行此操作并检查输出以查看发生了什么:

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top