Вопрос

У меня есть VehicleViewModel, у которого есть вспомогательная ViewModel NotesViewModel

public IManageVehicleNotesViewModel NotesViewModel { get; set; }

При первой активации VehicleViewModel я активирую вспомогательную ViewModel.

NotesViewModel.Activate();

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

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

Однако, хотя текстовые поля являются обязательными для подвида (поэтому 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 работают.

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

Ваше здоровье,

Энди

Это было полезно?

Решение

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

Попробуйте использовать такой инструмент, как Вынюхивать чтобы проверить, является ли Command свойство кнопки установлено

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top