Réutilisation des vues et de la grid de texte

Je travaille sur Windows Phone 8 app.

Je crée dynamicment plusieurs Textview et Grid dans la boucle For.

for (int j = 0; j < 300; j++) { Image image = new Image(); image.Source = new BitmapImage(new Uri("/Images/sample256.png", UriKind.RelativeOrAbsolute)); image.Tag = i.ToString(); Grid questionGrid = new Grid(); questionGrid.HorizontalAlignment = HorizontalAlignment.Center; questionGrid.VerticalAlignment = VerticalAlignment.Center; TextBlock question = new TextBlock(); question.TextWrapping = TextWrapping.Wrap; question.TextAlignment = TextAlignment.Center; question.Text = " this is the question and its id is Question" + i; question.FontSize = 30; question.Foreground = new SolidColorBrush(Colors.Black); question.HorizontalAlignment = HorizontalAlignment.Center; questionGrid.Children.Add(question); Grid answerGrid = new Grid(); answerGrid.HorizontalAlignment = HorizontalAlignment.Center; answerGrid.VerticalAlignment = VerticalAlignment.Center; TextBlock answer = new TextBlock(); answer.TextWrapping = TextWrapping.Wrap; answer.TextAlignment = TextAlignment.Center; answer.Text = "this is answer and its id is Answer" + i; answer.FontSize = 30; answer.Foreground = new SolidColorBrush(Colors.Black); answer.HorizontalAlignment = HorizontalAlignment.Center; answerGrid.Children.Add(answer); LayoutRoot.Children.Add(image); LayoutRoot.Children.Add(questionGrid); LayoutRoot.Children.Add(answerGrid); } 

Comme vous pouvez le constater, la saisie est environ 300 fois, ce qui explique la charge de travail considérable et les retards importants qui surviennent lorsque la page répond à une interaction de l’utilisateur.

Comment réduire la charge? afin que je puisse reprendre les vues créées dyamiquement.

Fondamentalement, au lieu de créer des objects compliqués directement dans le code de la page cs, vous devez créer un contrôle utilisateur. Lorsque vous contrôlez l’utilisateur, vous définissez les positions de votre élément, c’est-à-dire que si vous souhaitez qu’il comporte une image et quelques blocs de texte, vous les placez simplement là. Ce serait un modèle.

Ensuite, vous créez une liste de contrôles utilisateur dans une boucle.

Donc, votre code ressemblerait à ceci:

 for (int j = 0; j < 300; j++) { SomeUserControl someUserControl = new SomeUserControl(constuctorValue1, constuctorValue2); ListOfSomeUserControls.Add(someUserControl); LayoutRoot.Children.Add(someUserControl); } 

Où ListOfSomeUserControls est une liste définie sur le code de votre page.

Ici, vous pouvez envoyer des données au constructeur, par exemple someUserControl sera votre valeur ImageUri ou texte.

OU, vous pouvez créer des propriétés sous le contrôle de l'utilisateur pour y définir des données.

OU vous pouvez créer des méthodes au niveau du contrôle utilisateur, telles que ChangeImageUri () ou quelque chose comme ça.

Pour utiliser ces contrôles utilisateur créés dynamicment, vous devez utiliser ListOfSomeUserControls [Index]. Vous pouvez également enregistrer cette liste quelque part pour une utilisation antérieure.

C'est l'idée de base.


Dans le lien que vous avez partagé, le PO crée une liste de liens vers des images. Sentez-vous, la différence: il a 5 boîtes d'image à la page et une liste de 300 liens. Alors, quand vous démarrez votre application, vous avez ceci:

Image1 :: listOfUris [1] Image2 :: listOfUris [2] Image3 :: listOfUris [3] Image4 :: listOfUris [4] Image5 :: listOfUris [5]

Lorsque vous appuyez sur le bouton Suivant , vous déplacez simplement cette liste de 1.

Image1 :: listOfUris [2] Image2 :: listOfUris [3] Image3 :: listOfUris [4] Image4 :: listOfUris [5] Image5 :: listOfUris [6]

C'est tout, juste 5 images, pas 300.