WPF - привязка команды MVVM к Sub ViewModel - PullRequest
0 голосов
/ 16 сентября 2009

У меня есть VehicleViewModel, который имеет под ViewModel NotesViewModel

public IManageVehicleNotesViewModel NotesViewModel { get; set; }

При первой активации VehicleViewModel я активирую под ViewModel.

NotesViewModel.Activate();

Активация вызывает метод для инициации нескольких команд, я остановился на этом и вызывается.

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

Тем не менее, хотя TextBox и связывают в подчиненном представлении (поэтому DataContext на месте), ни одна из команд не является обязательной - я пытался вызвать RaiseCanExecuteChanged для команд, но они не отключают, не включают и не вызывают методы как и ожидалось.

Я не знаю, имеет ли это отношение (поскольку текстовые поля являются обязательными), но я связываю View и ViewModel, используя ResourceDictionary, так что ...

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

Команды на верхнем уровне VehicleViewModel работают.

Кто-нибудь испытывал что-нибудь подобное? Это порядок я делаю вещи? Любая помощь с благодарностью получена!

Приветствия

Andy

Ответы [ 2 ]

2 голосов
/ 16 сентября 2009

Вызывает ли свойство CreateCommand событие PropertyChanged? Если этого не произойдет, пользовательский интерфейс не будет уведомлен, когда вы назначите его ...

Попробуйте использовать инструмент, подобный Snoop , чтобы проверить, установлено ли свойство Command кнопки

0 голосов
/ 16 сентября 2009

Сделайте это и проверьте вывод, чтобы увидеть, что происходит:

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

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

Он должен сообщать, к какому объекту он на самом деле пытается привязаться и т. Д. Проверьте окно вывода во время работы, чтобы увидеть, что происходит с этой привязкой.

...