2009-09-16 10 views
0

J'ai un VehicleViewModel qui a un sous ViewModel de NotesViewModelWPF - MVVM Commande lie Sub ViewModel

public IManageVehicleNotesViewModel NotesViewModel { get; set; } 

Sur la première activation de VehicleViewModel activer le sous ViewModel. L'activation appelle une méthode pour initialiser un certain nombre de Commandes, j'ai cassé cela et l'ai appelée.

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

Cependant, bien que les TextBoxes lient le sous View (de sorte que le DataContext est en place) aucune des commandes sont obligatoires - J'ai essayé d'appeler RaiseCanExecuteChanged sur les commandes, mais ils ne désactivez pas, permettent ou appelez les méthodes comme prévu.

Je ne sais pas si son pertinente (comme les zones de texte sont obligatoires) mais j'associer la vue et ViewModel en utilisant un ResourceDictionary comme si ...

<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 au niveau supérieur VehicleViewModel travail.

Quelqu'un a-t-il déjà expérimenté quelque chose comme ça? Est-ce l'ordre que je fais des choses? Toute aide reçue avec gratitude!

Cheers,

Andy

Répondre

2

La propriété CreateCommand déclenche-t-elle l'événement PropertyChanged? Si elle ne le fait pas, l'interface utilisateur ne sera pas averti lorsque vous lui attribuez ...

Essayez d'utiliser un outil comme Snoop pour vérifier si la propriété Command du bouton est réglé

+0

Nice one merci, précédemment Je n'ai jamais eu à avoir un PropertyChanged sur les Commandes, mais je viens de réactualiser mes Modules. J'avais compris que RaiseCanExecuteChanged était l'alternative à PropertyChanged pour les commandes, merci pour le pointeur! –

+0

Si la commande est définie avant que la vue ne soit liée à ViewModel, vous n'avez pas besoin de déclencher PropertyChanged. Quoi qu'il en soit, mes propriétés de commande sont généralement en lecture seule et paresseuses, donc je n'ai pas besoin de m'en soucier –

0

Pour ce faire, et vérifier 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 doit signaler quel but il est en train d'essayer de se lier à, etc. Vérifier votre fenêtre de sortie pendant que vous courez pour voir ce qui se passe avec cette liaison.

Questions connexes