2
MVVMを使用したリストビューの自動スクロールを実装しようとしています。私はあなたがScrollIntoViewを呼び出すことによってリストビューを更新できることを知っていますが、それは私が避けようとしているコードビハインドを必要とします。リストビューMVVMを使用した自動スクロール
私は、ListViewのItemSourceをObservableCollectionにバインドしました。リストビューは自動的に、ログに追加された最新の項目までスクロールします。
<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