【问题标题】:Get Item selected after right click on context menu右键单击上下文菜单后选择项目
【发布时间】:2016-03-09 21:24:55
【问题描述】:

如何通过单击绑定到 WPF 中的列表视图控件的上下文菜单来获取所选项目?

这是我的标记:

<ListView Name="lvCustomerJobs">
    <ListView.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Remove"
                Click="cmCustomerRemoveJob"
                Command="{Binding RemoveItem}"
                CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, 
                Path=PlacementTarget.SelectedItem}" />
        </ContextMenu>
    </ListView.ContextMenu>
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Status" Width="150" DisplayMemberBinding="{Binding Status}" />
            <GridViewColumn Header="Booked in by" Width="150" DisplayMemberBinding="{Binding BookedInBy}" />
            <GridViewColumn Header="Date Required" Width="150" DisplayMemberBinding="{Binding DateRequired}" />
        </GridView>
    </ListView.View>
</ListView>

这是我的代码:

private void cmCustomerRemoveJob(object sender, RoutedEventArgs e)
{
    var item = ((FrameworkElement)e.OriginalSource).DataContext as User;
    if (item != null)
    {
        MessageBox.Show(item.DateRequired +  " Item's Double Click handled!");
    }
}

但项目为空?

【问题讨论】:

    标签: c# wpf listview contextmenu


    【解决方案1】:

    您应该将sender 对象转换为MenuItem,然后像这样使用CommandParameter

    private void cmCustomerRemoveJob(object sender, RoutedEventArgs e)
    {
        var item = ((MenuItem)sender).CommandParameter as User;
        if (item != null)
        {
            MessageBox.Show(item.DateRequired + " Item's Double Click handled!");
        }
    }
    

    【讨论】:

    • 抱歉,我的回复延迟了。被叫走了。这很有效,非常感谢:)
    • sender 对象中提取CommandParameter 属性值有什么意义,而该值应该已经在e 对象中设置?
    【解决方案2】:

    我将我的 ListView 绑定到模型中的一个集合,并将 SelectedItem 也绑定到模型。

    <ListView ItemSource="{Binding CustomerCollection}" SelectedItem="{Binding SelectedCustomer}">
    

    那么,我的命令方法就可以根据需要引用SelectedCustomer了。

    如果由于某种原因这并不理想,我很想知道!

    【讨论】:

    • 抱歉,我的回复延迟了。被叫走了。我试过了,但没有用。项目仍然为空
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    相关资源
    最近更新 更多