【问题标题】:Listview Automatic Scrolling using MVVM使用 MVVM 的 Listview 自动滚动
【发布时间】:2011-11-14 03:22:50
【问题描述】:

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

我已将 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 事件查看器),因为新事件显示在顶部。 Thats not exactly an answer to your question, but if this approach is justified in your case, you wont 必须做自动滚动。
  • 如果它是特定于视图的,那么在 MVVM 中使用 Code-Behind 没有任何问题。例如,我经常使用代码隐藏来设置焦点、运行动画、更改控件的位置等。由于这段代码是与视图相关的,它应该运行在视图后面,而不是在具有业务逻辑的视图模型中。跨度>

标签: wpf mvvm


【解决方案1】:

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

article 是一个很好的示例,它尝试将树视图项带入滚动视图,同时坚持使用 MVVM。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多