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