当ListItem中的按钮被按下时,Listitem的Mvvm Light UWP索引

时间:2016-10-31 13:49:12

标签: c# xaml listview uwp mvvm-light

我的问题:

我有一个ListView,它有一个ItemTemplate;包含一个DataTemplate,其中包含一些AppBarButtons。 现在,当用户按下ListView中的一个按钮时,包含该按钮的ListItem不会突出显示。 这个问题也导致了我不知道如何获得的问题 listitem的索引,其中包含用户单击的按钮。

列表项:

One ListItem

Mainpage.xaml中的代码:

       <ListView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Vertical">                                 
                                <StackPanel Orientation="Horizontal"> 
                                           <!-- Simplified, Left out other AppBarButtons -->
                                            <AppBarButton Foreground="White" VerticalAlignment="Center" 
                                              Label="Navigate" Icon="Map" >
                                                <interactivity:Interaction.Behaviors>
                                                    <core:EventTriggerBehavior EventName="Tapped">
                                                        <core:InvokeCommandAction Command="{Binding Main.OpenMapCommand, Mode=OneWay, Source={StaticResource Locator}}"></core:InvokeCommandAction>
                                                    </core:EventTriggerBehavior>
                                                </interactivity:Interaction.Behaviors>
                                            </AppBarButton>                                      
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
        </ListView.ItemTemplate>

命令:

    public RelayCommand OpenMapCommand
    {
        get
        {
            return _openMapCommand
                       ?? (_openPaneCommand = new RelayCommand(
                           () =>
                           {
                               Debug.WriteLine("Opening map");
                               // Center on New York City
                               var uriNewYork = new Uri(@"bingmaps:?cp=40.726966~-74.006076");

                               // Launch the Windows Maps app
                               var launcherOptions = new Windows.System.LauncherOptions();
                               launcherOptions.TargetApplicationPackageFamilyName = "Microsoft.WindowsMaps_8wekyb3d8bbwe";
                               var success = Windows.System.Launcher.LaunchUriAsync(uriNewYork, launcherOptions);
                           }));
                   }
    }

这个问题的答案需要提供:

  • 如何获取ListItem的索引,该ListItem包含已被按下以在relay命令中使用的AppBarButton(请注意,当用户按下AppBarButton时,ListItem不会被选中)

2 个答案:

答案 0 :(得分:1)

ItemTemplate中的DataContext将是您要作为命令参数传递的项目,因此您应该能够将其绑定到CommandParameter

<core:InvokeCommandAction Command="{Binding Main.OpenMapCommand, Source={StaticResource Locator}}" CommandParameter="{Binding}"/>
_openPaneCommand = new RelayCommand(item =>
{
    ....
});

答案 1 :(得分:0)

常见的情况是使用按钮上的Tag属性,绑定到ListItem的值并将其作为命令参数传递

有关详细信息,请参阅其他StackO答案UWP buttons inside Listview items