2016-04-07 11 views
0

したがって、クリックイベントで正しいSelectedIndexを取得できません。どんなに私が選ぶどのような項目、私はいつも戻って取得しない-1有効なListView.SelectedIndexを取得できません

をここに私のイベントです:

private void Delete_Click(object sender, RoutedEventArgs e) 
{ 
    var index = CitiesDisplay.SelectedIndex; 
    if(CitiesDisplay.SelectedIndex >= 0) 
    { 
     vm.Cities.Remove(vm.Cities[index]); 
    } 
} 

そして、ここでは私のListViewです:

<ListView Name="CitiesDisplay" ItemsSource="{Binding}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical" Holding="ListViewItem_Holding"> 
       <!-- Begin Flyout menu --> 
       <FlyoutBase.AttachedFlyout> 
        <MenuFlyout> 
         <MenuFlyoutItem Text="Delete" Click="Delete_Click"/> 
         <MenuFlyoutItem Text="Navigate To" Click="NavigateTo_Click"/> 
        </MenuFlyout> 
       </FlyoutBase.AttachedFlyout> 
       <!-- End Flyout Menu --> 
       <StackPanel Orientation="Horizontal"> 
        <StackPanel Orientation="Vertical"> 
         <TextBlock Name="CityName" Text="{Binding Name}" FontSize="20"></TextBlock> 
         <TextBlock Name="MaxTemp" Text="{Binding max}"/> 
         <TextBlock Name="MinTemp" Text="{Binding min}"/> 
         <TextBlock Name="CurrentTemp" Text="{Binding temp}"/> 
        </StackPanel> 
        <Image Name="Logo" Width="50" Height="50" Source="{Binding icon}" HorizontalAlignment="Right" Margin="5"/> 
       </StackPanel> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

なぜ私は本当に理解していません私は以前のプロジェクトで同じことをしたので、私のSelectedIndexを取得することはできませんし、それは完璧に働いた。

私も、SelectedItemsを無駄に操作しようとしました。

いくつかの追加の詳細

:私は、Visual Studioを使用してのWindows Phone 8.1アプリケーション(WinRTの)を開発しています2015年の更新1.

+0

に変わってしまうの後ろにあなたのコードと同じままでしょうか? – CathalMF

+0

@CathalMF CitiesDisplayにデバッグするとき、私は実際にアイテムを含んでいるアイテムコレクションを持っています(とにかくそれらは表示されます)。 –

+0

CitiesDisplay.ItemsSource = MyItemsのようなコードでリストビューをバインドしていますか?たぶんあなたが表示を変更すると、アイテムソースはすべてをリセットしています。 – CathalMF

答えて

0

はい、あなたのSelectedIndexは常に残るとして-1どちらItemClickSelectionChangedイベントはのためにトリガーするようクリックイベントのデザイン制約は、ItemTemplate StackpanelのHoldingイベントによって消費されています。あなたは

  1. あなたVisualTree
  2. ItemTemplateに
  3. 親までを横断するために必要となる、この問題を解決するには
    は、あなたの結合モデルにその内容を型キャストして値を取得してみてください。

あなたのXAMLは、あなたのCitiesDisplayオブジェクトにデバッグする場合には、コレクションに何かを持っているんcurosityのうち

private DependencyObject GetDependencyObjectFromVisualTree(DependencyObject startObject, Type type) 
     {    
      DependencyObject parent = startObject; 
      while (parent != null) 
      { 
       if (type.IsInstanceOfType(parent)) 
        break; 
       else 
        parent = VisualTreeHelper.GetParent(parent); 
      } 
      return parent; 
     } 


     private void Delete_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) 
     { 
      var selectedItem = GetDependencyObjectFromVisualTree(e.OriginalSource as DependencyObject, typeof(ListViewItem)) as ListViewItem;  
//here you can use it to traverse your vm.Cities list to update it or do anything. 
      System.Diagnostics.Debug.WriteLine(((YourModel)selectedItem.Content).Cities); 
     }