0

我有一个 ControlTemplate 在 ListView 中显示项目。ListView 有 500 多个项目。我正在保留状态并从 XML 中获取选定的项目并将其发送到 listview 以默认选择它以用于下一次导航到屏幕。

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

我可以使用任何 Setter 或 Style 来执行此操作吗?

请建议。

4

1 回答 1

1

我最近使用 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);
                });
            }
        }
    }
}

需要注意的一些事项:

于 2013-05-08T08:10:06.320 回答