7
votes

WPF et MVVM: sauvegardez la position de ScrollViewer et définissez lors de la rechargement

J'ai un vision de défilement pour un StackPannel. Les utilisateurs souhaitent enregistrer la position de la vision de ScrollViewer afin que l'application soit rechargée avec leurs données, StackPannel affichera les articles qu'ils visualisaient auparavant. Cela n'a rien à voir avec lequel les éléments ont été sélectionnés, le cas échéant, simplement la potion de la vision de ScrollViewer par rapport aux éléments StackPannel. Donc, si la StackPannel a 50 éléments et que la vision de ScrollViewer est défilée de sorte que les éléments 20-25 de StackPannel sont visibles, je dois recharger l'application et faire défiler jusqu'à ce poste sans sélectionner un élément. En outre, j'utilise MVVM et j'aimerais définir la position ScrollViewer via le code de viewModel.


1 commentaires

J'ai regardé dans Scroll.scrolltohorizontalOffset () mais je voudrais lier cela en quelque sorte à ma viewModel


3 Réponses :


-1
votes

Avez-vous examiné à l'aide de ScrollViewer .Scrollinfo propriété? Il a des membres qui représentent le décalage de chaque barre de défilement ( horizontaloffset , VerticalOffset ) que vous pourriez essayer de lier. Je ne sais pas si ce sont des propriétés de dépendance, cependant.

Une autre option serait de trouver la barre de défilement réelle dans l'arborescence visuelle et de se lier à la position de chacune d'elles.


1 commentaires

C'est plus un commentaire qu'une réponse imo.



6
votes

Sous l'échantillon stockera le décalage de défilement dans une machine virtuelle et le chargera lorsque la fenêtre (TestWindow) s'ouvre. Vous devez également stocker et charger la taille de la fenêtre car elle affectera probablement le décalage de défilement également. Si vous voulez, vous pouvez déplacer le code derrière TestWindow en une classe de comportement attachée.

xaml: p> xxx pré>

code derrière: p> xxx

Utilisation: P>

private void OnOpenOpenTestWindow(object sender, RoutedEventArgs e)
{
    TestWindow testWindow = new TestWindow();
    testWindow.DataContext = _vm;
    testWindow.Show();
}

private VM _vm = new VM();


0 commentaires

0
votes

Vous pouvez également définir la position d'un ScrollViewer en appelant le ScrollToverticaloffset Méthode.

contentScrollViewer.ScrollToVerticalOffset(50);


0 commentaires