Slavka_online
@Slavka_online
Интересная личность

Некорректно работает автоскролл в DataGrid, как переписать поведение?

В общем стоит задача, есть датагрид, из вне у него устанавливается SelectedIndex и нужно что-бы сразу происходил автоскролл до выделенного объекта (ну и как дополнение чтобы было видно еще следующие 5 объектов). Вся проблема в том что скрол не доходит до элемента, который находится далеко внизу списка, который сейчас не видно, например если я сейчас вижу элементы с 40-80, то до 120 он не скролится автоматом, но зато до 20 скроллится.
Вот код Behavior который я дописал к датагриду
public class ScrollIntoViewBehavior : Behavior<DataGrid>
    {
        protected override void OnAttached()
        {
            AssociatedObject.SelectionChanged += new SelectionChangedEventHandler(AssociatedObject_SelectionChanged);
        }

        void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var dataGrid = (sender as DataGrid);
            dataGrid.UpdateLayout();
            dataGrid.ScrollIntoView(dataGrid.SelectedItem);
            
        }
    }

Xaml внутри тега DataGrid
<i:Interaction.Behaviors>
                    <behaviors:ScrollIntoViewBehavior />
                </i:Interaction.Behaviors>


И код установления индекса
public void SetFocusOnCommandByNumber(int index)
        {
            if ((index >= _commands.Count) || (SelectedIndex == index))
                return;
            if ((index + 5) < _commands.Count)
            {
                SelectedIndex = index + 5;
                SelectedIndex = index;
            }
            else
            {
                SelectedIndex = index;
            }
        }

Индекс приходит из вне несколько раз в секунду, поэтому я исключил сигналы об изменении если значение не изменилось.
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы