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

항상 내가 그것에 추가 해요 상태, 즉 항상 내가이 일을 할 뒤에 코드에서 그런 말을하는 것입니다 증가의 ScrollViewer 컨트롤은 WPF에서

Status+= Environment.NewLine + "Hi"; 

그리고에서 ScrollViewer를하지만, 상태 내가 볼 수있는 것은 첫 번째입니다. 제가보기에는 스크롤해야 할 마지막 것을보고 싶습니다. 제 질문은 : 제가 스크롤러를 자동으로 스크롤 할 수있게 만드는 방법은 무엇입니까? 첫번째.

영어로 깨진 죄송합니다. 이 같은 뒤에 코드에 액세스 할 수 있도록

답변

1

이름 당신의 ScrollViewer :

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

이 그럼 당신은이 작업을 수행 할 수 있습니다 내가 MVVM 수행 방식으로

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

을, 나는 액세스 할 수 있습니다 내 View에서 내 ViewModel에 연결하면 View가 처음로드 될 때 ViewModel의 PropertyChanged 이벤트에 가입하게됩니다.

다음 ViewModelChanged 콜백에서 나는이있을 것 :

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

때마다 뷰 모델의 상태 속성 변경의에서 ScrollViewer 지금 종료 스크롤됩니다. 메모리 누출을 피하기 위해 화면을 떠날 때 MyViewModel.PropertyChanged에서 탈퇴하는 것을 잊지 마십시오.

+0

감사합니다.하지만 MVVM 패턴에서이 작업을 어떻게 수행 할 수 있습니까? –

+0

MVVM에서 ViewModel은 ScrollViewer의 존재 여부와 같은보기에 대한 세부 정보를 알 수 없습니다. 이와 같은 경우에는이 작업을 수행하기 위해 뷰 코드 숨김에 코드를 작성하는 것이 널리 수용되는 것으로 간주됩니다. 내 대답을 조정하여 MVVM으로 어떻게 할 수 있는지 보여줄 것입니다. –

+0

이 방법이 xaml에서 할 수 있습니까? –