C#-将CommandParameter绑定到“;DataContext”;ListViewItem的

本文关键字:DataContext ListViewItem CommandParameter 绑定 C#- | 更新日期: 2023-09-27 18:29:02

我希望能够将ButtonCommandParameter绑定为当前ListViewItem。这是我的XAML:

<ListView Grid.Row="1" x:Name="Playlists" ItemsSource="{Binding Playlists, UpdateSourceTrigger=PropertyChanged}">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel HorizontalAlignment="Center" VerticalAlignment="Top" Width="100" Margin="5">
                <Button x:Name="btnPlayPlaylist" Content="Play" Command="{Binding Path=PlayPlaylistCommand}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

当我单击btnPlayPlaylist按钮时,我希望能够在ViewModel中接收相应的播放列表。要么直接在我的List<Playlist>Playlist对象中获取它的索引。

他们有办法做到这一点吗?

感谢:)

C#-将CommandParameter绑定到“;DataContext”;ListViewItem的

当然有。您正在使用一个命令,在这种情况下,您应该为它定义一个参数,以便代码能够访问按钮所在的模型。

简而言之:

<Button x:Name="btnPlayPlaylist" Content="Play" Command="{Binding Path=PlayPlaylistCommand}" CommandParameter="{Binding}" />

命令参数现在是整个播放列表(按钮的整个DataContext)。在Command_Executed的代码隐藏中,访问如下参数:

var playlist = e.Parameter as Playlist;

这里我假设你的数据类型是播放列表。

注意:然而,在不使用命令的情况下,还有另一种方法!只需为按钮添加一个事件处理程序,并在上面指定一个标记

<Button x:Name="btnPlayPlaylist" Content="Play" Click="button_Click" Tag="{Binding}" />

然后在代码后面:

var playlist = (sender as Button).Tag as Playlist;

请记住始终投射标记和发件人以及参数

要将当前DataContext作为CommandParameter发送,请执行

<Button ... CommandParameter="{Binding}">

<Button ... CommandParameter="{Binding Path=.}">