2011-03-15 4 views
3

ObservableCollection을 사용하여 내 ViewModel에 항목을 추가하는 ListBox 컨트롤이 있습니다. 그러나 ListBox는 예상대로 스크롤 위치를 유지하지 못합니다.Silverlight ListBox 스크롤 위치 유지

저는 Silverlight를 처음 사용하고 MVVM을 사용하기로 선택했으나이를 수행 할 수 없습니다. (뷰 모델 XAML 컨트롤에 액세스해야하지만, 내부와?)

  • 가져옵니다 스크롤 위치를
  • 는 ObservableCollection에 (수행에 항목을 추가, 바로 뷰 모델에 Dispatcher.CheckBeginInvokeOnUI를 통해 ListBox 컨트롤의 : 시나리오는 다음과 같습니다 ItemSource가 바인딩 됨).
  • 설정 목록 상자의 스크롤 위치는 (다시 뷰 모델 내에서 XAML 컨트롤에 액세스 할 필요가 있겠습니까?) 내가 여기에이 대답을 발견했습니다

: Restoring exact scroll position of a listbox in Windows Phone 7

그리고와 이 수정의 약간은 내가 수직 스크롤 생각을 위치는 다음을 통해 가져오고 설정할 수 있습니다.

ScrollViewer sv = TimelineTweets.Descendents().OfType<ScrollViewer>().FirstOrDefault(); 
double startOffset = sv.VerticalOffset; 
sv.ScrollToVerticalOffset(startOffset); 

그러나 MVVM 및 Silverlight를 사용하면 어떻게 혼란에 빠질까요? 매우 혼란 스럽습니다.

답변

1

스크롤 위치는 UI 용이므로 UI ​​코드에서 처리하도록 제안합니다. ViewModel에서 MVVM을 처리하기 때문에 MVVM이 손상되지 않습니다.

0

당신은 당신의 내부보기

(DataContext as VM).ScrollVOffset=sv.VerticalOffset 

를 사용하여 저장할 수 있습니다. 여기서 VM은 ViewModel 클래스이고 ScrollVOffset은 ViewModel 클래스의 속성입니다.

관련 문제