2013-05-08 93 views
0

我有一个ControlTemplate在ListView中显示项目。 ListView有500多个项目。我保存状态并从XML中获取选定的项目并将其发送到列表视图,以便默认选择它以用于下一个导航到屏幕。如何使用ScrollIntoView在xaml中的ListView

我的问题是如何通过xaml设置选定的项目(它可能出现在最后,即视野范围之外)。 ViewModel不知道任何UI控件,所以我不能在ViewModel中应用ScrollIntoView方法。

我可以使用任何Setter或Style来做到这一点吗?

请建议。

+0

该文档说的是什么? – 2013-05-08 07:24:16

+0

你能提供一个代码示例吗?您是否将ViewModel属性(例如MySelectedItem)绑定到ListView SelectedItem属性? – mamuesstack 2013-05-08 08:00:11

回答

0

我最近用DataGrid做了这个。诀窍是将自定义行为附加到您的视图。像那样。

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

而且assocciated类:

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); 
       }); 
      } 
     } 
    } 
} 

有些事情需要注意的:

相关问题