2013-05-08 2 views
0

У меня есть ControlTemplate для отображения элементов в ListView. ListView имеет более 500 элементов. Я сохраняю состояние и получаю выбранный элемент из XML и отправляю его в список, чтобы выбрать его по умолчанию для следующей навигации по экрану.Как использовать ScrollIntoView для ListView в xaml

Моя проблема. Как установить выделенный элемент (который может присутствовать в последнем, то есть вне поля зрения) с помощью xaml. ViewModel не знает о каком-либо элементе управления пользовательского интерфейса, поэтому я не могу применить метод ScrollIntoView в ViewModel.

Могу ли я использовать любой сеттер или стиль для этого?

Просьба предложить.

+0

Что говорит документация? –

+0

Не могли бы вы привести пример кода? Вы привязываете свойство ViewModel (например, MySelectedItem) к свойству ListView SelectedItem? – mamuesstack

ответ

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

Некоторые вещи, чтобы быть в курсе:

Смежные вопросы