Click事件的XAML参数

时间:2010-10-17 13:49:07

标签: c# events xaml

我有以下XAML:

<Button Name="btnJeans" Click="btnJeans_Click" Padding="-1" >
    <StackPanel Orientation="Horizontal" Margin="0,0,0,17" Name="jeansItem">
        <!--Replace rectangle with image-->
        <Image Height="119" Width="82" Source="{Binding Image}" Margin="12,0,9,0"/>
        <StackPanel Width="311">                                    
            <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
            <TextBlock Text="{Binding Price}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
        </StackPanel>
    </StackPanel>
</Button>

但是,btnJeans_Click需要传递“{Binding Name}”作为参数。

我该怎么做? 我正在为Windows Phone 7开发。

3 个答案:

答案 0 :(得分:5)

PC上的替代方法是从click事件args获取DataContext,例如

private void Button_Click(object sender, RoutedEventArgs e)
    {
      var record = ((Button)e.OriginalSource).DataContext;
      MessageBox.Show("Do something with " + record.ToString()); 
    }

这可能也适用于手机?

答案 1 :(得分:3)

我认为您需要使用命令而不是按钮单击事件来执行此操作,以便执行以下操作:

<Button Name="btnJeans" Command="{Binding Path=ButtonClickCommand}" CommandParameter="{Binding Name}">
    ...
</Button>

然后,您需要将ButtonClickCommand公开为ICommand对象。

如何执行此操作取决于应用程序其余部分的结构。例如。使用MVVM模式等。

答案 2 :(得分:0)

XAML允许您设置按钮的BindingContext。

请参见下面的示例,该示例引用将传递给点击处理程序的对象的Id属性。

    <Button Name="btnJeans" Click="btnJeans_Click" Padding="-1" BindingContext="{Binding Id}">
<StackPanel Orientation="Horizontal" Margin="0,0,0,17" Name="jeansItem">
    <!--Replace rectangle with image-->
    <Image Height="119" Width="82" Source="{Binding Image}" Margin="12,0,9,0"/>
    <StackPanel Width="311">                                    
        <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
        <TextBlock Text="{Binding Price}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
    </StackPanel>
</StackPanel>

然后,您可以使用发送者的BindingContext对象访问该属性。在示例中,您可以在处理程序中引用id属性。

    private void btnJeans_Clicked(object sender, EventArgs e)
    {
        var button = sender as Button;
        var id = button.BindingContext;

    }