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>
대체 방법으로 '추가'대신 '삽입'을 사용하여 컬렉션 시작 부분에 새 항목을 추가 할 수 있습니다. 새로운 이벤트가 맨 위에 표시 될 때 로그 (Windows 이벤트 뷰어)의 경우 특히 유용합니다. 그건 당신의 질문에 대한 정확한 대답은 아니지만,이 접근법이 귀하의 경우에 정당화된다면, 당신은 전혀 자동 스크롤을하지 않아도됩니다. – icebat
보기 특정 MVVM에서 코드 숨김을 사용하면 아무 문제가 없습니다. 예를 들어 포커스 숨기기, 애니메이션 실행, 컨트롤 위치 변경 등과 같은 코드 숨김을 자주 사용합니다.이 코드는 뷰와 관련되어 있으므로 비즈니스 로직이있는 뷰 모델이 아닌 뷰 뒤에서 실행해야합니다. – Rachel