2016-04-07 35 views
0

alınamıyor Bu yüzden bir click olayıyla doğru bir SelectedIndex geri alma konusunda sorun yaşıyorum. Ne olursa olsun ben seçmek hangi öğeyi, hep geri almak -1 İşte Geçerli bir ListView.SelectedIndex

benim olaydır: Burada

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

Ve ListView geçerli:

<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> 

Gerçekten anlamıyorum neden SelectedIndex'imi alamıyorum çünkü aynı şeyi bir önceki projede yaptım ve kusursuz bir şekilde çalıştı.

Ayrıca, SelectedItems'i boşuna kullanmaya çalıştım.

Bazı ek ayrıntılar

: Visual Studio kullanarak bir Windows Phone 8.1 App (winrt) geliştiriyorum 2015 Güncelleme 1.

+0

renge dönüşecek aynı kalır ki? – CathalMF

+0

@CathalMF CitiesDisplay'e hata ayıklama yaparken, gerçekten öğelerim içeren Öğeler koleksiyonuna sahibim (ve yine de görüntülenirler). –

+0

Liste görünümünüzü kodda CitiesDisplay.ItemsSource = MyItems; Belki ekranı değiştirdiğinizde, öğe kaynağı her şeyi sıfırlar. – CathalMF

cevap

0

Evet senin SelectedIndex hep kalacaktır olarak -1 ne ItemClick ne de SelectionChanged olaylar nedeniyle tetikleyecek şekilde ItemTemplate Stackpanel'in Holding etkinliğiniz tarafından tüketilen tıklama etkinliğinin tasarım kısıtlaması.
Eğer

  1. ıtemtemplate
  2. sizin Bağlama modeline içeriğini typecasting ebeveyn kadar sizin VisualTree çapraz ve değer elde etmeye çalışmak gerektir ediyorum Bunu düzeltmek için.

Kişisel XAML bunu koleksiyonunda alakası var mı senin CitiesDisplay nesnesine hata ayıklama eğer kod arkasında curosity Out

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); 
     }