#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 к этому объекту, либо явно установить контекст данных вашего шаблона управления для экземпляра модели представления. Как прокомментировал кто-то еще — примеры кода, вероятно, помогут здесь.