WPF - ligação MVVM comando no Sub ViewModel
Pergunta
Eu tenho um VehicleViewModel que tem uma sub ViewModel de NotesViewModel
public IManageVehicleNotesViewModel NotesViewModel { get; set; }
Na primeira ativação de VehicleViewModel eu ativar o sub ViewModel.
NotesViewModel.Activate();
A ativação chama um método init um número de comandos, eu pausa já apontou isso e seu que está sendo chamado.
CreateCommand = new DelegateCommand<object>(OnCreateCommand, CanCreate);
No entanto, embora os TextBoxes são obrigatórias para a sub View (de modo que o DataContext está em vigor) nenhum dos comandos são vinculativas - Eu tentei chamar RaiseCanExecuteChanged sobre os comandos, mas eles não desabilitar, habilitar ou chamar os métodos como esperado.
Eu não sei se sua relevante (como os TextBoxes são vinculativas), mas eu estou associando a View e ViewModel usando um ResourceDictionary como assim ...
<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>
Os comandos no trabalho VehicleViewModel nível superior.
Alguém já experimentou nada como este? É a ordem que eu estou fazendo as coisas? Qualquer ajuda recebidas com gratidão!
Cheers,
Andy
Solução
Será que a propriedade CreateCommand
gatilho do evento PropertyChanged
? Se isso não acontecer, a interface do usuário não será notificado quando você atribui isso ...
Tente usar uma ferramenta como Snoop para verificar se a propriedade Command
do botão é definido
Outras dicas
Faça isso e verifique a saída para ver o que está acontecendo:
<UserControl …
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase" />
<Button Command="{Binding MyCommand,
diagnostics:PresentationTraceSources.TraceLevel=High}" … />
Deve relatar o objeto que ele está realmente tentando se ligam a, etc. Verifique a janela de saída enquanto você está correndo para ver o que está acontecendo com essa ligação.