У меня есть ItemControl, связанный с коллекцией на моем ViewModel. Этот элемент ItemsControl представляет несколько «Сообщений». Мне нужен ContextMenu, который при нажатии имеет возможность скопировать это конкретное сообщение в буфер обмена.Получение объекта ContextMenu из элемента в ItemsControl
Команда должна активироваться в ViewModel, а CommandParameter, который я хочу передать, - это само сообщение.
Проблема, с которой я столкнулась, заключается в получении фактического сообщения о том, что ContextMenu был открыт OVER.
Я пробовал несколько разных подходов, но я не могу понять, как передать сообщение в качестве параметра команды.
Должен ли я искать другой подход для достижения этого? Возникает ли проблема с использованием элемента ItemsControl с элементом ItemsPresenter?
<ScrollViewer CanContentScroll="False"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
Grid.RowSpan="1">
<ItemsControl ItemsSource="{Binding MyActiveConversation.OrderedMessages, UpdateSourceTrigger=PropertyChanged}"
IsEnabled="{Binding MyActiveConversation.IsOptOut, Converter={StaticResource BoolToEnabledInverter}}"
ItemTemplateSelector="{StaticResource tSelector}"
VirtualizingPanel.IsVirtualizing="False"
SourceUpdated="SourceUpdatedHandler" MinWidth="450">
<ItemsControl.ContextMenu>
<ContextMenu>
<MenuItem Header="Copy" Template="{DynamicResource MenuItemControlTemplate}"
CommandParameter="{Binding}" Command="{Binding Path=Data.CopyTextMessageCommand, Source={StaticResource ContextProxy}}">
</MenuItem>
</ContextMenu>
</ItemsControl.ContextMenu>
<ItemsControl.Template>
<ControlTemplate>
<Grid>
<ItemsPresenter VirtualizingPanel.IsVirtualizing="False"/>
</Grid>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
Я отредактировал мой вопрос, чтобы включить XAML. Если я использую {Binding} для CommandParameter, он возвращает ViewModel за кулисами. Я использую прокси для получения DataContext. – JordanTDN