WPF - Enlace de comando MVVM en Sub ViewModel
Pregunta
Tengo un VehicleViewModel que tiene un sub ViewModel de NotesViewModel
public IManageVehicleNotesViewModel NotesViewModel { get; set; }
En la primera activación de VehicleViewModel, activo el sub ViewModel.
NotesViewModel.Activate();
La activación llama a un método para iniciar una serie de Comandos, he roto esto y se llama.
CreateCommand = new DelegateCommand<object>(OnCreateCommand, CanCreate);
Sin embargo, aunque los cuadros de texto son vinculantes en la vista secundaria (por lo que el DataContext está en su lugar) ninguno de los comandos es vinculante: he intentado llamar a RaiseCanExecuteChanged en los comandos pero no deshabilitan, habilitan ni llaman a los métodos como se esperaba.
No sé si es relevante (ya que los cuadros de texto son vinculantes) pero estoy asociando View y ViewModel usando un ResourceDictionary como tal ...
<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>
Los comandos en el nivel superior VehicleViewModel funcionan.
¿Alguien ha experimentado algo como esto? ¿Es el orden en que estoy haciendo las cosas? Cualquier ayuda recibida con gratitud!
Saludos,
Andy
Solución
¿La propiedad CreateCommand
activa el evento PropertyChanged
? Si no es así, la IU no será notificada cuando la asignes ...
Intente utilizar una herramienta como Snoop para verificar si la propiedad Command
del botón está configurado
Otros consejos
Haga esto y verifique la salida para ver qué está pasando:
<UserControl …
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase" />
<Button Command="{Binding MyCommand,
diagnostics:PresentationTraceSources.TraceLevel=High}" … />
Debería informar a qué objeto realmente está intentando vincularse, etc. Verifique su ventana de salida mientras está ejecutando para ver qué está sucediendo con ese enlace.