【问题标题】:Bind Command to MenuItem将命令绑定到 MenuItem
【发布时间】:2010-04-24 21:17:22
【问题描述】:

我有 ListView,我正在尝试将命令绑定到 ListView 的 ContextMenu。

<ListView x:Name="listView1" ItemsSource="{Binding Path=Persons}">
            <ListView.Resources>
                <ContextMenu x:Key="ItemContextMenu">
                    <MenuItem Header="Add" />
                    <MenuItem Header="Edit"/>
                    <Separator/>
                    <MenuItem Header="Delete" Command="{Binding Msg}" /> 
                </ContextMenu>
            </ListView.Resources>
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <!--<EventSetter Event="PreviewMouseLeftButtonDown" />--><!--Handler="OnListViewItem_PreviewMouseLeftButtonDown" />-->
                    <Setter Property="ContextMenu" Value="{StaticResource ItemContextMenu}"/>
                    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                </Style>
            </ListView.ItemContainerStyle>
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=Name}" />
                    <GridViewColumn Header="Sur Name" DisplayMemberBinding="{Binding Path=SurName}" />
                    <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Path=Age}" />
                </GridView>
            </ListView.View>


        </ListView>
        <Button Content="Message" Command="{Binding Msg}" />

绑定到按钮效果很好,但是当我单击删除 ContextMenu 中的项目时,命令不起作用!为什么?

【问题讨论】:

标签: c# wpf xaml command


【解决方案1】:

您的问题与在资源中使用绑定有关。除非您使用{Binding Path=Value,Source={x:Static Some.StaticProperty}} 之类的东西,否则它们通常不起作用。为了使ElementNameDataContext 绑定起作用,您需要求助于ElementSpyDataContextSpy。在您的特定情况下,如果您依赖 DataContext 绑定,您的 XAML 应如下所示:

        <ListView.Resources>
            <DataContextSpy x:Name="spy" />
            <ContextMenu x:Key="ItemContextMenu">
                <MenuItem Header="Add" />
                <MenuItem Header="Edit"/>
                <Separator/>
                <MenuItem Header="Delete" Command="{Binding DataContext.Msg,Source={StaticResource spy}}" /> 
            </ContextMenu>
        </ListView.Resources>

【讨论】:

    猜你喜欢
    • 2011-07-15
    • 1970-01-01
    • 2013-07-23
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多