2

ボタンの ListViewItem を取得したいと思います。通常の WPF では、GetContainerForItem() を使用しますが、WinRT に相当するものが見つかりません。私の AddButton_Click() 関数では、関連付けられたボタンが押された項目の ID を取得する脆弱な方法がわかります。

<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;
     }
4

1 に答える 1

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で実装を見つけることができます。

次に、イベントハンドラーをバインディングに置き換えますcommand

<Button Grid.Column="0" Width="40" Height="40" Command="{Binding command}" Content="&#xE118;" FontFamily="Segoe UI Symbol" Style="{StaticResource TextButtonStyle}" />
于 2012-11-08T05:52:51.703 に答える