2013-05-08 100 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); 
       }); 
      } 
     } 
    } 
} 

有些事情需要注意的:

相關問題