C#-将CommandParameter绑定到“;DataContext”;ListViewItem的
本文关键字:DataContext ListViewItem CommandParameter 绑定 C#- | 更新日期: 2023-09-27 18:29:02
我希望能够将Button
的CommandParameter
绑定为当前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
对象中获取它的索引。
他们有办法做到这一点吗?
感谢:)
当然有。您正在使用一个命令,在这种情况下,您应该为它定义一个参数,以便代码能够访问按钮所在的模型。
简而言之:
<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=.}">