0

我的模板是这样声明的-

<DataGrid.Resources>

    <ContextMenu x:Key="RowMenu" DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
        <MenuItem Header="Remove" Command="{Binding Cancel}" />
    </ContextMenu>

</DataGrid.Resources>

我正在使用行样式应用模板 -

<DataGrid.RowStyle>

    <Style TargetType="DataGridRow">
        <Setter Property="ContextMenu" Value="{StaticResource RowMenu}" />
    </Style>

</DataGrid.RowStyle>

菜单显示正常

但是当单击上下文菜单项时,该命令(在 ItemListViewModel 上)不执行

public class ItemListViewModel : INotifyPropertyChanged
{
    public void Cancel()
    {
        MessageBox.Show("Cancel test");
    }
...
}

我的绑定工作正常,因为我可以做这样的事情 -

    foreach (ItemListViewModel ul in mylist.SelectedItems)
        MessageBox.Show(item.FullDescription);

我整晚都在试图弄清楚这一点。今天刚开始使用WPF。

请有人告诉我哪里出错了

4

2 回答 2

0

我不认为你可以绑定到一个简单的方法。您需要绑定到应该是ICommand接口实现的命令。在您的情况下,您需要创建一个实现该接口的类并将该类类型的属性添加到您的模型中。

请参阅此示例作为参考:http: //msdn.microsoft.com/en-us/magazine/dd419663.aspx

于 2012-05-19T16:35:18.473 回答
0

我决定 ListView 更适合我的需求,我正在使用它。我不再尝试将上下文菜单绑定到项目,而是为整个列表视图提供一个上下文菜单,并在需要的 ContextMenuOpen 事件中简单地启用或禁用项目。

于 2012-05-20T02:20:23.277 回答