我有一个数据模板有2个文本块和1个按钮我需要访问按钮ID来获取每个数据模板的特定数据,但问题是无法从c#代码访问该按钮
这是我的数据模板的XAML代码
<DataTemplate x:Key="CityItemTemplate">
<Border BorderBrush="Black" BorderThickness="4" CornerRadius="8" Background="#FF003847" Width="320">
<StackPanel Margin="4">
<TextBlock x:Name="NameBlock" TextWrapping="NoWrap" Text="{Binding Content}" FontSize="38" VerticalAlignment="Center" Margin="0,0,4,0" Grid.Column="1" TextTrimming="WordEllipsis"/>
<TextBlock x:Name="DescriptionBlock" TextWrapping="Wrap" Text="{Binding Description}" FontSize="24" VerticalAlignment="Center" Margin="0,0,4,0" Grid.Column="1" TextTrimming="WordEllipsis" MaxHeight="168"/>
<Button x:Uid="{Binding idb}" x:Name="b12" Content="download
" HorizontalAlignment="Left" VerticalAlignment="Top" Width="166" Height="87" Click="b1_click" />
</StackPanel>
</Border>
</DataTemplate>
我需要知道点击了哪个按钮?
答案 0 :(得分:0)
然后你可以使用按钮事件处理程序b1_click。在sender参数中,您可以引用当前按下的按钮。按钮很难区分,因为它们具有相同的名称。
private void b12_Click(object sender, RoutedEventArgs e)
如果您想知道哪些数据“链接”到按钮(uid,内容等),请使用Command和CommandParameter而不是事件处理程序。
的Xaml:
<phone:PhoneApplicationPage x:Name="mainPage">
<!-- New button in template -->
<Button x:Uid="{Binding idb}" x:Name="b12" Content="download" HorizontalAlignment="Left" VerticalAlignment="Top" Width="166" Height="87"
Command="{Binding Path=DataContext.ButtonClickCommand, ElementName=mainPage}"
CommandParameter="{Binding}" />
视图模型:
public ICommand ButtonClickCommand { get; set; }
public MyViewModel()
{
ButtonClickCommand = new RelayCommand<CityItem>(e => ButtonClickExecute(e));
}
public void ButtonClickExecute(object parameter)
{
CityItem cityItem = parameter as CityItem;
}
当您单击该按钮时,将触发ButtonClickExecute。在参数中,您有源CityItem对象,现在您可以确定单击了哪个按钮。 RelayCommand来自MVVM Light Toolkit,见nuget。