LongListSelector und DataTemplateSelector

8

Ich verwende den LongListSelector, um Listen- oder Rasteranzeigen für meine Objekte zu erstellen. Dazu habe ich einen DataTemplateSelector erstellt und die Eigenschaft LayoutMode zur Laufzeit geändert. Dies funktioniert, aber es scheint ein Problem mit dem DataTemplateSelector zu geben. Wenn ich die Seite anfange, wird der DataTemplateSelector dreimal für meine drei Elemente aufgerufen. Wenn ich zu einer anderen Seite navigiere (Einstellungsseite, um den LayoutMode zu ändern) und dann zurück, wird der DataTemplateSelector nur zwei Elemente genannt, aber es gibt immer noch drei Elemente.

DataTemplateSelector:

%Vor%

ItemViewModeTemplateSelector:

%Vor%

MainPage.xaml:

%Vor%

Dies ist die Anzeige, wenn ich die Seite anfange:

Dann navigiere ich zu einer anderen Seite und zurück:

EDIT: Ich habe ein Beispielprojekt für dieses Problem vorbereitet. Es sollte ohne Probleme laufen.

Projekt: Ссылка

    
chrs.zrkl 30.10.2013, 18:16
quelle

3 Antworten

3

Ich habe etwas Ähnliches mit meiner App gemacht, aber dem Benutzer erlaubt, den LayoutMode von LLS mit einer Appbar-Taste auszuwählen. Ich ändere grundsätzlich den LongListSelector.LayoutMode und dann ItemTemplate im Code und der LLS aktualisiert sich automatisch. Ich bin mir nicht sicher, ob das helfen wird, aber hier ist mein Code.

%Vor%

Vielleicht haben Sie die Antwort schon herausgefunden, aber nur, um sie der Konversation hinzuzufügen: Das gibt mir wirklich gute Leistung für eine ziemlich große Datenmenge. Vielleicht können Sie etwas Ähnliches tun, wenn Sie nach dem Ändern des Layouts in den Einstellungen zu der Seite zurückkehren?

    
WiteCastle 06.01.2014, 17:01
quelle
4

Ich habe nicht die Lösung, aber vielleicht einen Hinweis für jemanden, der das Problem lösen wird.
Ich denke, das Problem ist mit LongListSelector.UpdateLayout () -Methode - wenn es zum ersten Mal gefeuert wird, gibt es keine Elemente, an die LLS gebunden wurde - OnChangeMethod wird oft als Itemsource.Count aufgerufen. Aber wenn wir die Seite verlassen und zurückgehen - LLS wird aktualisiert und die Methode heißt, das mittlere Element wegzulassen.
Es bedeutet, dass es für eine gerade Anzahl von Elementen funktioniert - OnChangeMethod heißt korrekte Anzahl von Malen, aber für ungerade Anzahl von Elementen - es wird Anzahl von Elementen genannt - 1.
Die zweite Sache ist, warum es überhaupt heißt - wenn es keine Änderungen gibt.

Ich füge auch einen Code hinzu, um daran zu arbeiten (sehr einfach).

    
Romasz 06.11.2013 12:50
quelle
1

Hier ist ein Spaziergang. (Vielleicht wird das Problem mit WP 8.1 Update behoben, zusammen mit andere Ich habe die Arbeit mit LLS entdeckt Ich weiß - diese Idee ist hässlich, hart und so weiter, aber vielleicht reicht es für deinen Zweck:

Weil das Problem das Nachladen von LLS betrifft , Ich habe es gezwungen, es jedes Mal zu initialisieren, wenn ich zu der Seite navigiere (in der Tat muss ich die ganze Seite initialisieren - es wird nicht nur mit LLS funktionieren). Ich habe InitializeComponent () verschoben und knöpfe Ereignisse und so weiter zu OnNavigatedTo ():

%Vor%

Mindestens OnContentChanged () wird so oft ausgelöst wie nötig. Code finden Sie hier .

    
Romasz 11.11.2013 17:38
quelle