2012-11-08 43 views
2

我想获得按钮的ListViewItem。在正常的WPF中,我会使用GetContainerForItem(),但无法找到WinRT的等效项。在我的AddButton_Click()函数中,您将看到我得到相关按钮被推入的项目的id的脆弱方式。在WinRT中,如何获得listviewitem中按钮的父级?

<DataTemplate x:Key="Custom80ItemTemplate"> 
     <Grid Margin="6"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <Button Grid.Column="0" Width="40" Height="40" Click="AddButton_Click" Content="&#xE118;" FontFamily="Segoe UI Symbol" Style="{StaticResource TextButtonStyle}" /> 
      <StackPanel Grid.Column="1" Margin="10,0,0,0"> 
       <TextBlock Text="{Binding name}" Style="{StaticResource ItemTextStyle}" MaxHeight="40"/> 
       <TextBlock Text="{Binding id}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap"/> 
       <TextBlock Text="{Binding group}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap"/> 
      </StackPanel> 
     </Grid> 
    </DataTemplate> 


    <ListView x:Name="searchResultsListView" Grid.Row="1" 
       SelectionMode="None" 
       HorizontalAlignment="Left" 
       Margin="10,0,10,10" 
       ItemTemplate="{StaticResource Custom80ItemTemplate}" /> 

    private async void AddButton_Click(object sender, RoutedEventArgs e) 
    { 
     var parent1 = ((FrameworkElement)sender).Parent; 
     var grid = parent1 as Grid; 
     var stackpanel = grid.Children[1] as StackPanel; 
     var textBlock = stackpanel.Children[1] as TextBlock; 
    } 

回答

1

为什么您需要直接访问模板中的元素?如果你只是想访问点击项目id值,你可以只是把该命令在项目本身的按钮:

public class ItemViewModel 
{ 
    public string name { get; set; } 
    public string id { get; set; } 
    public string group { get; set; } 

    public ICommand command { get; set; } 

    public ItemViewModel 
    { 
     command = new RelayCommand(_ => OnClick()); 
    } 

    private void OnClick() 
    { 
     // access id here 
    } 
} 

你可以找到一个RelayCommand实现here

现在只要通过结合command取代了事件处理:

<Button Grid.Column="0" Width="40" Height="40" Command="{Binding command}" Content="&#xE118;" FontFamily="Segoe UI Symbol" Style="{StaticResource TextButtonStyle}" /> 
+0

哇,这是超级明显。 :)这是我正在寻找的答案。 –

相关问题