2011-11-14 2 views
2

MVVM을 사용하여 Listview의 자동 스크롤을 구현하려고합니다. 나는 당신이 ScrollIntoView를 호출하여 listview를 업데이트 할 수 있다는 것을 알고 있지만, 나는 그것을 막으려 고하고있는 Code Behind를 필요로한다.Listview MVVM을 사용하는 자동 스크롤

내 ListView의 ItemSource를 ObservableCollection에 바인딩 했으므로 Listview에서 자동으로 로그에 추가 된 최신 항목까지 스크롤합니다.

 <ListView ItemsSource="{Binding Log}" 
        SelectedIndex="{Binding SelectedLine}" 
        ScrollViewer.HorizontalScrollBarVisibility="Auto" 
        ScrollViewer.VerticalScrollBarVisibility="Auto" 
        Grid.Row="1"> 
      <ListView.ItemsPanel> 
       <ItemsPanelTemplate> 
        <VirtualizingStackPanel> 

        </VirtualizingStackPanel> 
       </ItemsPanelTemplate> 
      </ListView.ItemsPanel> 

      <ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
        <Setter Property="VerticalContentAlignment" Value="Top" /> 
       </Style> 
      </ListView.ItemContainerStyle> 

      <ListView.View> 
       <GridView> 

        <GridViewColumn Header="Type" Width="50"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding Type}" HorizontalAlignment="Center"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 
      </ListView.View> 


     </ListView> 
+1

대체 방법으로 '추가'대신 '삽입'을 사용하여 컬렉션 시작 부분에 새 항목을 추가 할 수 있습니다. 새로운 이벤트가 맨 위에 표시 될 때 로그 (Windows 이벤트 뷰어)의 경우 특히 유용합니다. 그건 당신의 질문에 대한 정확한 대답은 아니지만,이 접근법이 귀하의 경우에 정당화된다면, 당신은 전혀 자동 스크롤을하지 않아도됩니다. – icebat

+1

보기 특정 MVVM에서 코드 숨김을 사용하면 아무 문제가 없습니다. 예를 들어 포커스 숨기기, 애니메이션 실행, 컨트롤 위치 변경 등과 같은 코드 숨김을 자주 사용합니다.이 코드는 뷰와 관련되어 있으므로 비즈니스 로직이있는 뷰 모델이 아닌 뷰 뒤에서 실행해야합니다. – Rachel

답변

2

MVVMAttached Behaviors이 함께합니다. ObservableCollection.Add()이 발생하면 연결된 동작을 사용하여 새 항목으로 스크롤 할 수 있습니다.

article은 MVVM을 고수하는 동안 스크롤 뷰에 트리보기 항목을 가져 오는 좋은 예입니다.