MVVM中多个控件的通用上下文菜单

时间:2016-08-01 08:18:57

标签: c# wpf mvvm

我有一个WPF窗口,其中包含4个只读TextBoxes,所有这些窗口都需要启用带有复制选项的上下文菜单。目前我正在处理代码问题。但我听说这不是一个好方法。

<TextBox Name="StepsTextBox" 
         Text="{Binding Steps, Mode=OneWay}" 
         IsReadOnly="True" 
         Click="Copy_click"/>

代码隐藏:

private void Copy_click(object sender, RoutedEventArgs e)
{
    StepsTextBox.Copy();
}

我尝试使用MVVM如下:

<TextBox.ContextMenu>
    <ContextMenu>
        <MenuItem Header="Copy" Command="{Binding OnCopyButtonClick}" CommandParameter="{Binding ElementName=StepsTextBox}"/>
    </ContextMenu>
</TextBox.ContextMenu>

但如果我将其作为参数传递,如何从代码中访问此文本框。此外,我如何保持所有文本框的代码通用?有人可以帮忙吗?提前谢谢。

private void OnCopyButtonClick(TextBox textBox)
{
    //??
}

1 个答案:

答案 0 :(得分:1)

您可以使用内置ApplicationCommands.Copy。无需实现任何操作,复制功能已经实现。

<TextBox.ContextMenu>
    <ContextMenu>
        <MenuItem Header="Copy" Command="Copy" />
    </ContextMenu>
</TextBox.ContextMenu>

在复制文本之前,您仍然需要选择文本,但在复制文本时可能会出现这种情况。