我有一个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信息传递给该命令。请帮助我...
答案 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
我希望它可以帮到你