Управление шаблонным событием с помощью команды реле

#silverlight #silverlight-4.0 #controls #mvvm-light #relaycommand

#silverlight #silverlight-4.0 #элементы управления #mvvm-light #relaycommand

Вопрос:

У меня проблема с запуском событий в шаблоне управления, который находится в другом шаблоне управления, и с использованием команды MVVM light relay.

Вот в чем дело: main_control имеет шаблон в общем стиле.xaml. sub_control шаблонизирован таким же образом.

main_control имеет несколько экземпляров sub_control в ObservableCollection

Теперь в моем проекте SL, реализованном с помощью MVVM Light, у меня есть представление с main_control в xaml. Это представление привязано к viewmodel, который заполняет его sub_control .

Чего я пытаюсь добиться, так это вернуть в viewmodel экземпляр нажатого sub_control.

Спасибо за вашу помощь.

Комментарии:

1. Было бы неплохо прикрепить ваши коды. Потому что DataContext и его связь с виртуальной машиной являются ключом к решению вашей проблемы.

Ответ №1:

Убедитесь, что следующие вещи выполнены правильно:

Предоставьте RelayCommand как свойство объекта, который представляет DataContext sub_control . Это может быть ваша ViewModel, чаще это экземпляр класса сущностей, который вы привязываете к коллекции. Убедитесь, что вы сделали его общедоступным и предоставили методы get и set.

   public RelayCommand MyCommand { get; set; }
 

Убедитесь, что для команды установлен новый экземпляр

   MyCommand = new RelayCommand(() =>
  {
     // Do something
  });
 

Наконец, установите привязку в вашем представлении

   xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
  xmlns:command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.SL4"
  ...
  <Button Content="Click Me">
    <i:Interaction.Triggers>
      <i:EventTrigger EventName="Click">
        <command:EventToCommand Command="{Binding MyCommand}"/>
      </i:EventTrigger>
    </i:Interaction.Triggers>
  </Button>
 

Комментарии:

1. Спасибо за этот ответ. Я пробовал это, но не работает. Проблема в том, что я хочу, чтобы экземпляр sub_control, щелкнувший, был скопирован в модель представления. Мой sub_control переносит элемент управления пользовательского интерфейса (Arc), который я не могу унаследовать.

2. Я бы проверил контекст данных sub_control, если это находится в элементе управления списком данных или что-то подобное, контекст данных, вероятно, будет объектом? В этом случае вам нужно либо добавить свойство RelayCommand к этому объекту, либо явно установить контекст данных вашего шаблона управления для экземпляра модели представления. Как прокомментировал кто-то еще — примеры кода, вероятно, помогут здесь.