2013-06-12 5 views
5

Ich arbeite an einer Windows Phone 8 App. Meine App verwendet den ListPicker aus dem Tookit. Mein Code in Frage sieht wie folgt aus:Windows Phone Toolkit ListPicker löst eine nicht behandelte Ausnahme aus

<toolkit:ListPicker x:Name="myListPicker" Margin="12,-6,12,-2" Loaded="myListPicker_Loaded"> 
    <toolkit:ListPicker.Items> 
    <!-- Items are defined here --> 
    </toolkit:ListPicker.Items> 
</toolkit:ListPicker> 


private void myListPicker_Loaded(object sender, RoutedEventArgs e) 
{ 
    if ((myListPicker != null) && (viewModel != null)) 
    { 

    } 
} 

Jedes Mal, wenn die Gesamtzahl der Elemente geht eine bestimmte Schwelle, meine app eine System.ArgumentException wirft. Ich weiß das, weil ich den folgenden Code haben:

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
    { 
     MessageBox.Show(e.ExceptionObject.Message + "\n\nException\n" + e.ExceptionObject.GetType().FullName + "\n" + e.ExceptionObject.StackTrace); 
     if (Debugger.IsAttached) 
     { 
      // An unhandled exception has occurred; break into the debugger 
      Debugger.Break(); 
     } 
    } 

Die Meldung sagt „Wert nicht innerhalb des erwarteten Bereichs fällt.“. Soweit ich das beurteilen kann, passiert dies, wenn der ListPicker in den Vollbildmodus wechseln muss. Ich kann jedoch nicht herausfinden, warum das passiert.

Hat jemand irgendwelche Einsichten?

+0

Wie viele Artikel fügen Sie hinzu? –

Antwort

0

ListPicker hat eine vordefinierte Anzahl von Elementen, die in der Standardliste angezeigt werden können. In älteren Versionen des Toolkits konnten Sie diesen Schwellenwert ändern, aber seitdem haben Sie ihn entfernt.

Da das Toolkit jedoch Open Source ist, können Sie immer tun, was ich getan habe - gehen Sie in den Quellcode und ändern Sie ihn, um größere Listen zu ermöglichen.

+0

Ich bin in Ordnung, wenn der ListPicker in den Vollbildmodus wechselt. Ich möchte nur, dass es funktioniert. Ich kann nicht herausfinden, warum es nicht funktioniert. – user70192

5

Scheinbar, mit Vollbild-Modus können Sie nicht die ListPicker Elemente auf bestimmte UI-Elemente innerhalb der Xaml-Seite. Sie müssen sie binden oder Templating verwenden.

Nach genau dieses Problem haben, fand ich eine Erklärung hier: http://silverlight.codeplex.com/workitem/9412

ListPickerItems sind UIElements und die ListPicker macht sie in ihrem Moderator. Wenn 5 oder weniger Elemente vorhanden sind, wird der erweiterte Modus auf der aktuellen Seite geöffnet, und Sie können alle Elemente im Präsentator sehen. Wenn 6 oder mehr Elemente vorhanden sind, wird beim Öffnen der Listenauswahl der Vollmodus aufgerufen, wodurch eine neue Seite geöffnet wird. Diese neue Seite enthält ein Listenfeld, in dem die Eigenschaft items auf die Elemente des listpickers gesetzt wird. Dies ist, wo es bricht. Wenn Sie die Elemente der Listbox auf die listpicker-Elemente setzen (in diesem Fall eine Liste von listpickeritems), werden die UIElements in der Listbox angezeigt. Jetzt ist ein einzelner Listboxitem an zwei Stellen in der visuellen Struktur enthalten.

Aufgrund dieses Problems unterstützt ListPicker nur Datenbindung und Templating. Setzen Sie die ListPicker-Elemente NICHT auf bestimmte UIElements.

ich es geschafft, meine Lösung zu erhalten, arbeiten so etwas wie dies zu tun:

<toolkit:ListPicker x:Name="myListPicker" Margin="12,-6,12,-2" Loaded="myListPicker_Loaded"> 
    <toolkit:ListPicker.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}" Tag="{Binding ID}"/> 
     </DataTemplate> 
    </toolkit:ListPicker.ItemTemplate> 
    <toolkit:ListPicker.FullModeItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}" Tag="{Binding ID}"/> 
     </DataTemplate> 
    </toolkit:ListPicker.FullModeItemTemplate> 
</toolkit:ListPicker> 


private void myListPicker_Loaded(object sender, RoutedEventArgs e) 
{ 
    if ((myListPicker != null) && (viewModel != null)) 
    { 
    myListPicker.ItemsSource = _Data; //_data is an array of objects with 2 properties named ID & Name 
    } 
} 
Verwandte Themen