1

我正在尝试通过UserName传递CommandParameter

<GridViewColumn   Width="Auto" Header="UserName" >
   <GridViewColumn.CellTemplate>
       <DataTemplate>
          <Button Click="Button_Click" Content="..." CommandParameter="{Binding Path=UserName}"></Button>                                                                                                         </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

但在这里我不确定我必须用什么来捕捉它......

private void Button_Click(object sender, RoutedEventArgs e)
{
    // How to get UserName  here?
}

有什么线索吗?

谢谢!

4

2 回答 2

2

使用这种方法可以做的最好的事情是:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var button = (Button) sender;
    var userName = button.CommandParameter;
}

虽然它会完成这项工作,但它不是CommandParameter应该如何使用的。CommandParameter应该作为参数传递给按钮的命令。因此,如果您将使用Command而不是处理Button.Click您的命令,则会在其ExecuteCanExecute处理程序中接收您的数据。请参阅 google 中的命令和按钮示例。这是来自谷歌的第一个链接,例如:How to use Commands in WPF

于 2012-11-06T17:20:37.080 回答
2

如果要使用点击处理程序,为什么不将 Button 的 Tag 属性绑定到 UserName?更多地符合 Tag 属性的意图,而不是滥用 Commanding 主体。

<Button Click="Button_Click" Content="Button Content" Tag="{Binding UserName}"/>

private void Button_Click(object Sender, RoutedEventArgs e)
{
    var Button = (Button)Sender;
    var UserName = (string)Button.Tag;
}
于 2012-11-06T20:51:06.603 回答