访问xaml中数据模板内的元素

时间:2014-02-15 07:04:47

标签: .net c#-4.0 windows-phone-8

我有一个数据模板有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&#xD;&#xA;" HorizontalAlignment="Left" VerticalAlignment="Top" Width="166" Height="87" Click="b1_click"  />
                </StackPanel>
            </Border>
        </DataTemplate>

我需要知道点击了哪个按钮?

1 个答案:

答案 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。