2012-11-08 88 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

哇,這是超級明顯。 :)這是我正在尋找的答案。 –

相關問題