从ItemsControl

时间:2016-02-17 14:33:13

标签: c# wpf mvvm

我有一个ItemsControl绑定到我的ViewModel上的一个集合。这个ItemsControl提供了几个“消息”。我需要一个ContextMenu,当单击它时,它提供了一个选项,用于将该特定消息复制到剪贴板。

Command应该在ViewModel上激活,我要传递的CommandParameter就是Message本身。

我遇到的问题是获取ContextMenu已被打开的实际消息。

我尝试过多种不同的方法,但我似乎无法找到一种方法将消息作为Command的参数传递。

我应该寻找一种不同的方法来实现这一目标吗?问题是使用带有ItemsPresenter的ItemsControl吗?

<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>

1 个答案:

答案 0 :(得分:0)

CommandParameter="{Binding}"对我有用,对CommandParameter="{Binding .}"

也一样