2016-10-31 3 views
0

Мой вопрос:MVVM Light UWP индекс ListItem Когда кнопка В ListItem нажимается

Я получил 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); 
          })); 
        } 
    } 

Whatan Ответ на этот вопрос должен обеспечить:

  • Как получить индекс ListItem который, содержащий AppBarButton, которая была нажата для использования в RelayCommand (быть в курсе ListItem не выбран, когда пользователь нажимает AppBarButton)

ответ

1

DataContext в ItemTemplate будет элемент, который вы хотите передать в качестве параметра команды, так что вы должны быть в состоянии просто привязать его к CommandParameter:

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

общий сценарий использует свойство Tag на кнопке, привязывается к значению ListItem и мимоходом, что в качестве параметра Command

Смотреть другие StackO ответ подробности UWP buttons inside Listview items