2016-05-06 15 views
0

Ich benutze Toolkit: listPicker für die Auswahl des Fahrzeugs aus einer Liste Sammlung, aber wenn ich auf eine andere Seite gehen und zurück zu dem mit dem listPicker Werkzeug, die Der ausgewählte Index wird auf '0' geändert (standardmäßig ist '-1', wenn die Liste leer ist). Bitte beachten Sie meine Methoden unter:wie Toolkit zu halten: listPicker selectedItem auf einer neuen Seite laden WP8

 private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
    { 
       ReadAllVehicleList dbVehicles = new ReadAllVehicleList(); 
       DB_VehicleList = dbVehicles.GetAllVehicles(); 
       pickVehicle.ItemsSource = DB_VehicleList.OrderByDescending(i => i.Id).ToList(); 
    } 

Dieser folgenden rufen:

public class ReadAllVehicleList 
{ 
    DatabaseHelperClass Db_Helper = new DatabaseHelperClass(); 
    public ObservableCollection<Vehicle> GetAllVehicles() 
    { 
     return Db_Helper.ReadVehicle(); 
    } 
} 

    //This class for perform all database CRUID operations 
    public class DatabaseHelperClass 
{ 
     SQLiteConnection dbConn; 

     public ObservableCollection<Vehicle> ReadVehicle(){ 
     using (var dbConn = new SQLiteConnection(App.DB_PATH)) 
     { 
      List<Vehicle> myCollection = dbConn.Table<Vehicle>().ToList<Vehicle>(); 
      ObservableCollection<Vehicle> VehicleList = new ObservableCollection<Vehicle>(myCollection); 
      return VehicleList; 
     } 
} 

Und ein selection Ereignis für das ausgewählte Fahrzeug zu bekommen und alle Betankungen in einem ListBox-Werkzeug für sie angezeigt werden:

 private void pickVehicle_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
      if (pickVehicle.SelectedIndex != -1) 
      { 
      VehiclesPage.selectedVehicle = pickVehicle.SelectedItem as Vehicle;//selectedVehicle присвоява избраното превозно средство. 
      ReadAllRefuelingList dbRefuelings = new ReadAllRefuelingList(); 
      DB_RefuelingList = dbRefuelings.GetAllRefuelings();//Извличане на всички записи за зареждане на гориво от базата данни 
      listBoxobj.ItemsSource = DB_RefuelingList.OrderByDescending(i => i.Id).ToList();//Показване на записите в обратен ред (descending) - най-новото ID се показва най-отгоре 
      } 
    } 

XAML:

 <toolkit:ListPicker x:Name="pickVehicle"  HorizontalAlignment="Center" Margin="0" VerticalAlignment="Top" Grid.Row="1" Width="480" SelectionChanged="pickVehicle_SelectionChanged" Background="Gray" BorderBrush="Orange" Foreground="White"> 
     <toolkit:ListPicker.ItemTemplate> 
      <DataTemplate> 
       <TextBlock HorizontalAlignment="Center"> 
           <Run Text="{Binding Make}"/> 
           <Run Text="{Binding Model}"/> 
       </TextBlock> 
      </DataTemplate> 
     </toolkit:ListPicker.ItemTemplate> 
     </toolkit:ListPicker> 

Hier ist ein Beispiel für das Problem. Ich habe 2 Fahrzeuge in der Datenbank/listPicker. Index '0' = BMW E46 und Index '1' = Opel Astra. Ich habe Opel Astra gewählt (Index '1'), aber wenn ich auf eine andere Seite und wieder zurück gehe, wird der Index wieder auf '0' gesetzt.

Image_1

+0

Kann mir jemand helfen? Es ist sehr dringend für mich :( –

Antwort

0

Die ItemsSource des ListPicker ist im Inneren des Loaded-Ereignis der Seite gesetzt.

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
     {  
      ReadAllVehicleList dbVehicles = new ReadAllVehicleList(); 
      DB_VehicleList = dbVehicles.GetAllVehicles();   
      pickVehicle.ItemsSource = DB_VehicleList.OrderByDescending(i => i.Id).ToList(); 
     } 

Das Loaded-Ereignis wird wieder, wenn Sie zu dieser Seite zurückkommen werden gefeuert und damit wird die ItemsSource zurückgesetzt werden, um das ausgewählte Element zu ändern.

auf Ihrer Anforderung Basierend Sie entweder den Code ItemSource an einen anderen Ort zu setzen verschieben kann oder kann die SelectedIndex des ListPicker sein speichern und neu zuzuweisen, während immer wieder kommen.