Question

J'ai un VehicleViewModel qui a un sous ViewModel de NotesViewModel

public IManageVehicleNotesViewModel NotesViewModel { get; set; }

Lors de la première activation de VehicleViewModel, j'active le sous ViewModel.

NotesViewModel.Activate();

L'activation appelle une méthode pour initialiser un certain nombre de commandes. J'ai interrompu l'opération et l'appelé.

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

Cependant, bien que les TextBox soient obligatoires sur la vue secondaire (le DataContext est donc en place), aucune des commandes n'est liée. J'ai essayé d'appeler RaiseCanExecuteChanged sur les commandes, mais elles ne désactivent pas, n'activent ni n'appellent les méthodes. comme prévu.

Je ne sais pas s'il est pertinent (car les TextBox sont obligatoires), mais j'associe View et ViewModel à l'aide d'un ResourceDictionary tel quel ...

<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>

Les commandes du niveau supérieur VehicleViewModel fonctionnent.

Quelqu'un at-il vécu quelque chose comme ça? Est-ce l'ordre que je fais les choses? Toute aide reçue avec gratitude!

A bientôt,

Andy

Était-ce utile?

La solution

La propriété CreateCommand déclenche-t-elle l'événement PropertyChanged ? Si ce n'est pas le cas, l'interface utilisateur ne sera pas notifiée lorsque vous l'attribuerez ...

Essayez d'utiliser un outil tel que Snoop pour vérifier si la propriété Command du bouton est défini

Autres conseils

Faites ceci et vérifiez la sortie pour voir ce qui se passe:

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

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

Il devrait indiquer l'objet auquel il tente réellement de se lier, etc. Vérifiez votre fenêtre de sortie pendant que vous exécutez pour voir ce qui se passe avec cette liaison.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top