通过CommandParameter传递数据

时间:2012-11-06 17:05:07

标签: c# wpf xaml

我想通过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?
}

有任何线索吗?

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

如果您要使用click处理程序,为什么不将Button的Tag属性绑定到UserName?与标签属性的意图相比,更多的是滥用命令主体。

<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;
}