我有以下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开发。
答案 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;
}