2016-02-17 2 views
0

У меня есть 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> 

ответ

0

CommandParameter="{Binding}" работает хорошо для меня, то же самое для CommandParameter="{Binding .}"

+0

Я отредактировал мой вопрос, чтобы включить XAML. Если я использую {Binding} для CommandParameter, он возвращает ViewModel за кулисами. Я использую прокси для получения DataContext. – JordanTDN

Смежные вопросы