我有一个 ControlTemplate 在 ListView 中显示项目。ListView 有 500 多个项目。我正在保留状态并从 XML 中获取选定的项目并将其发送到 listview 以默认选择它以用于下一次导航到屏幕。
我的问题是如何通过 xaml 设置所选项目(可能存在于最后一个视图中)。ViewModel 不知道任何 UI 控件,所以我不能在 ViewModel 中应用 ScrollIntoView 方法。
我可以使用任何 Setter 或 Style 来执行此操作吗?
请建议。
我最近使用 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);
});
}
}
}
}
需要注意的一些事项: