WPF - MVVM Befehlsbindung auf Sub Ansichtsmodell
Frage
Ich habe ein VehicleViewModel bekam, die eine Unteransichtsmodell von NotesViewModel hat
public IManageVehicleNotesViewModel NotesViewModel { get; set; }
Auf der ersten Aktivierung von VehicleViewModel ich das Unteransichtsmodell aktivieren.
NotesViewModel.Activate();
Die Aktivierung ruft eine Methode eine Reihe von Befehlen an init, ich habe Pause zeigte dies und seine aufgerufen wird.
CreateCommand = new DelegateCommand<object>(OnCreateCommand, CanCreate);
Doch obwohl die Textfelder auf dem Unteransicht verbindlich sind (so die Datacontext ist vorhanden) keiner der Befehle verbindlich sind - ich habe versucht zu rufen RaiseCanExecuteChanged auf die Befehle, aber sie nicht deaktivieren, aktivieren oder die Methoden aufrufen wie erwartet.
Ich weiß nicht, ob sein relevant (da die Textfelder sind verbindlich), aber ich bin Assoziieren der Ansicht und Ansichtsmodell eines Resource als so mit ...
<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>
Die Befehle auf der obersten Ebene VehicleViewModel Arbeit.
Hat jemand etwas erlebt? Ist es die Reihenfolge ich die Dinge tue? Jede Hilfe dankbar empfangen!
Cheers,
Andy
Lösung
Ist die CreateCommand
Eigenschaft löst das PropertyChanged
Ereignis? Wenn dies nicht der Fall, wird die UI nicht benachrichtigt, wenn Sie es zuweisen ...
Versuchen Sie, ein Tool wie Snoop verwenden, um zu überprüfen, ob die Command
Eigenschaft der Schaltfläche gesetzt
Andere Tipps
Tun Sie dies und überprüfen Sie die Ausgabe, um zu sehen, was los ist:
<UserControl …
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase" />
<Button Command="{Binding MyCommand,
diagnostics:PresentationTraceSources.TraceLevel=High}" … />
Es sollte berichten, was das Objekt es tatsächlich zu, usw. zu binden versuchen, Ihr Ausgabefenster überprüfen, während Sie sehen laufen, was mit sich geht, dass die Bindung.