我希望能够将(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
对象中获取索引。
他们有什么办法吗?
谢谢:)
答案 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=.}">