WPF ItemsControl - команда в ViewModel не запускается из ItemsControl
-
05-07-2019 - |
Вопрос
Я использую M-V-VM, и у меня есть команда в моей ViewModel под названием 'EntitySelectedCommand'.
Я пытался заставить все элементы в ItemsControl запускать эту команду, однако это не работает.
Я думаю, это потому, что каждый элемент 'datacontext' - это отдельный объект, к которому привязан элемент, а не ViewModel?
Кто-нибудь может указать мне правильное направление, пожалуйста?
Ваше здоровье,
Энди
<ItemsControl ItemsSource="{Binding Path=LinkedSuppliers}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Controls:EntityLabel Grid.Column="0" Grid.Row="0" Content="{Binding Name}" CurrentEntity="{Binding }" EntitySelected="{Binding EntitySelectedCommand}" ></Controls:EntityLabel>
<StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Решение
Ваше подозрение верно.У вас есть пара вариантов:
- Подвергать
EntitySelectedCommand
также из вашей дочерней модели просмотра (т.е.каждыйSupplier
тоже обладал бы этим свойством). - Измените свою привязку, чтобы использовать
RelativeSource
протянуть руку помощи и использоватьDataContext
от родителяItemsControl
.
Другие советы
Взгляните на Инструментарий MVVM...В нем есть такая идея ссылки на команду, которую вы можете использовать!
Создайте CommandRefrece в качестве ресурса, а затем просто используйте расширение разметки StaticResource...
<c:CommandRefrence x:Key="EntitySelectedCommandRef" Command="{Binding EntitySelectedCommand}" />
и тогда позже вы сможете использовать
...Command="{StaticResource EntitySelectedCommandRef}" ...
Не связан с StackOverflow