WPF - 子 ViewModel 上的 MVVM 命令绑定
题
我有一个 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}" … />
它应该报告它实际尝试绑定的对象等。在运行时检查输出窗口,看看该绑定发生了什么。
不隶属于 StackOverflow