如何从WPF样式传递当前DataGridCell信息

时间:2016-01-29 12:49:55

标签: c# wpf contextmenu wpfdatagrid datagridcell

我有一个StyleType = DataGridCell,它包含ContextMenu。我需要通过CommandParameter将DataGridCell信息传递给该命令。

<Style TargetType="{x:Type DataGridCell}" x:Key="DataGridCellStyle">
    <Setter Property="ContextMenu">
        <Setter.Value>
            <ContextMenu>
                <MenuItem Header="Copy" Command="{Binding CopyToClipBoardCommand, Mode=OneWay}" CommandParameter={}>
                    <MenuItem.DataContext>
                        <cust:CopytoContext/>
                    </MenuItem.DataContext>
                </MenuItem>
            </ContextMenu>
        </Setter.Value>
    </Setter>
</Style>

xmlns:cust="clr-namespace:MyProject.Util"

类源代码

public class CopytoContext
{
    #region Commands

    public ICommand CopyToClipBoardCommand
    {
        get
        {
            return new DelegatingCommand((object param) =>
            {
                new Action(() =>
                {
                     /// Logic to Copy the Content to Clipboard
                }).Invoke();
            });
        }
    }

    #endregion
}

如何将当前DataGridCell信息传递给该命令。请帮助我...

1 个答案:

答案 0 :(得分:1)

如果您希望避免使用控件的名称,那么您可以使用RelativeSource绑定:

<Style TargetType="{x:Type DataGridCell}">
    <Setter Property="ContextMenu">
        <Setter.Value>
            <ContextMenu>
                <MenuItem Header="Copy" Command="{Binding CopyToClipBoardCommand, Mode=OneWay}"
                            CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}, Path=PlacementTarget}">
                    <MenuItem.DataContext>
                        <cust:CopytoContext />
                    </MenuItem.DataContext>
                </MenuItem>
            </ContextMenu>
        </Setter.Value>
    </Setter>
</Style>

PlacementTarget的{​​{1}}属性返回ContextMenu所附加的控件(本例中为单元)。 然后在您的命令中,您可以使用此代码:

ContextMenu

我希望它可以帮到你