如何使用ScrollIntoView的ListView在xaml

本文关键字:xaml ListView 何使用 ScrollIntoView | 更新日期: 2023-09-27 18:12:40

我有一个ControlTemplate来显示ListView中的项目。ListView有500多个项目。我保留状态,并从XML中获得选中的项目,并将其发送到listview,默认情况下选择它,以便下一次导航到屏幕。

我的问题是如何通过xaml设置所选项目(可能存在于最后即不在视图中)。ViewModel不知道任何UI控件,所以我不能在ViewModel中应用ScrollIntoView方法。

我可以使用任何Setter或Style来做这个吗?

请建议。

如何使用ScrollIntoView的ListView在xaml

我最近对一个DataGrid这样做了。诀窍是将自定义行为附加到视图上。像这样。

<ListView ... >
    <iy:Interaction.Behaviors>
        <ext:ScrollIntoViewBehavior />
    </iy:Interaction.Behaviors>
    ...
</ListView>

和相关的类:

public class ScrollIntoViewBehavior : Behavior<ListView>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        this.AssociatedObject.SelectionChanged += new SelectionChangedEventHandler(AssociatedObject_SelectionChanged);
    }
    protected override void OnDetaching()
    {
        base.OnDetaching();
        this.AssociatedObject.SelectionChanged -= new SelectionChangedEventHandler(AssociatedObject_SelectionChanged);
    }
    private void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (sender is ListView)
        {
            ListView grid = (sender as ListView);
            if (grid.SelectedItem != null)
            {
                grid.Dispatcher.BeginInvoke(() =>
                {
                    grid.UpdateLayout();
                    grid.ScrollIntoView(grid.SelectedItem);
                });
            }
        }
    }
}

注意事项:

  • 添加对System.Windows.Interactivity程序集的引用
  • 在视图中添加相应的命名空间:xmlns:iy=http://schemas.microsoft.com/expression/2010/interactivity