2012-03-15 4 views
0
<ScrollViewer VerticalScrollBarVisibility="Auto" > 
<TextBlock Text="{Binding Status}" 
      HorizontalAlignment="Center" /> 
</ScrollViewer> 

Le statut toujours j'ajoutant, c'est-à-dire que dans le code derrière toujours que je fais cette chose:ScrollViewer contrôle dans WPF

Status+= Environment.NewLine + "Hi"; 

Et ScrollViewer de plus en plus, mais le statut que je vois est le premier, quand je veux voir le dernier que j'ai besoin de faire défiler dessous, ma question est: comment je peux faire défiler le Scrollviewer automatiquement, ce qui signifie que je veux toujours voir le dernier statut pas la première.

Désolé pour l'anglais approximatif.

Répondre

1

Nom de votre ScrollViewer afin que vous puissiez y accéder dans le code derrière, comme ceci:

<ScrollViewer x:Name="MyScrollViewer" VerticalScrollBarVisibility="Auto" > 
<TextBlock Text="{Binding Status}" 
     HorizontalAlignment="Center" /> 
</ScrollViewer> 

Ensuite, vous pouvez faire ceci:

Status+= Environment.NewLine + "Hi"; 
MyScrollViewer.ScrollToEnd(); 

Avec la façon dont je fais MVVM, j'ai accès à ma ViewModel à partir de ma vue, donc lorsque la vue se charge d'abord, je souscris à l'événement PropertyChanged sur mon ViewModel comme tel:

MyViewModel.PropertyChanged += ViewModelChanged; 

puis dans le rappel ViewModelChanged j'ai ceci:

private void ViewModelChanged(object sender, PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName == "Status") 
     MyScrollViewer.ScrollToEnd(); 
} 

Chaque fois que les changements de propriété d'état du ViewModel, ScrollViewer défile maintenant à la fin. N'oubliez pas de vous désabonner de MyViewModel.PropertyChanged lorsque vous quittez cet écran pour éviter une fuite de mémoire.

+0

Merci, mais comment je peux le faire dans le modèle MVVM? –

+0

Dans MVVM, le ViewModel n'est pas supposé connaître les détails de la vue tels que la présence d'un ScrollViewer. Dans de tels cas, il est généralement considéré comme acceptable d'écrire du code dans la vue code-behind pour accomplir cette tâche. Je vais ajuster ma réponse pour vous montrer comment je le ferais avec MVVM. –

+0

Est-ce une autre façon de faire dans xaml? –

Questions connexes