Listview使用MVVM自动滚动

时间:2011-11-14 03:22:51

标签: wpf mvvm

我正在尝试使用MVVM实现Listview的自动滚动。我知道您可以通过调用ScrollIntoView来更新列表视图,但这需要Code Behind,我正在努力避免。

我将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 个答案:

答案 0 :(得分:2)

MVVMAttached Behaviors齐头并进。 ObservableCollection.Add()发生后,您可以使用附加行为滚动到新项目...

这个article是一个很好的例子,它试图在坚持MVVM的同时将树视图项置于滚动视图中。