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

时间:2016-01-05 20:30:35

标签: c# wpf xaml data-binding

我希望能够将(function(){ 'use strict'; angular.module('testModule', []) .factory('testFactory', testFactory); testFactory.$inject = ['$log', '$q', '$location']; function testFactory($log, $q, $location){ $log.log('This will log to the console'); } })(); 的{​​{1}}绑定为当前CommandParameter。这是我的XAML:

Button

当我点击ListViewItem按钮时,我希望能够在我的ViewModel中收到相应的播放列表。通过直接在我的<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对象中获取索引。

他们有什么办法吗?

谢谢:)

2 个答案:

答案 0 :(得分:2)

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

如此简短:

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

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

var playlist = e.Parameter as Playlist;

这里我假设您的DataType是播放列表。

注意:但是,如果不使用命令,还有另一种方法!只需为按钮添加一个事件处理程序,并在其上指定一个标记。

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

然后在代码背后:

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

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

答案 1 :(得分:2)

要将当前DataContext作为CommandParameter发送

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

或者

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