2011-11-14 24 views
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> 
+1

代替方法として、[追加]の代わりに[挿入]を使用して、コレクションの先頭に新しいアイテムを追加することができます。場合によっては、新しいイベントが上に表示されるので、ログ(Windowsイベントビューアの例)の場合は特に便利です。 これはあなたの質問に対する答えではありませんが、このアプローチがあなたのケースで正当化されれば、自動的にスクロールする必要はありません。 – icebat

+1

ビュー固有のMVVMでコードビハインドを使用すると何も問題はありません。たとえば、フォーカスを設定したり、アニメーションを実行したり、コントロールの位置を変更するために、コードビハインドを使用することがよくあります。このコードはビューに関連しているため、ビューの背後で実行する必要があります。 – Rachel

答えて

2

MVVMおよびAttached Behaviorsが手に入ります。あなたはこのarticle

... ObservableCollection.Add()が行われた後、新しい項目にスクロールする添付ビヘイビアを使用することができますMVVMにこだわりながら、スクロールビューにツリービュー項目を持参しようとした良い例です。

関連する問題