6

I want to show the selected item in a list view automatically(it isn't possible to show all items without scrolling).

this.listView.SelectedIndex = 999; selects of course an item, but it doesn't show it.

what can I use to show it automatically ?

kind regards, jeff

akjoshi
  • 14,989
  • 13
  • 101
  • 119
Jeffrey
  • 1,362
  • 4
  • 11
  • 18

4 Answers4

10

You can do this:-

listview.ScrollIntoView(listview.SelectedItem);

Scroll WPF ListBox to the SelectedItem set in code in a view model

Community
  • 1
  • 1
1

Check out this one:
Scroll WPF Listview to specific line

Community
  • 1
  • 1
Yvo
  • 17,869
  • 11
  • 68
  • 88
1

Install a nuget package System.Windows.Interactivity.WPF, create a class like following:

public class ScrollToSelectedListBoxItemBehaviour: Behavior<ListBox>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.SelectionChanged += AssociatedObjectOnSelectionChanged;
        AssociatedObject.IsVisibleChanged += AssociatedObjectOnIsVisibleChanged;
    }

    protected override void OnDetaching()
    {
        AssociatedObject.SelectionChanged -= AssociatedObjectOnSelectionChanged;
        AssociatedObject.IsVisibleChanged -= AssociatedObjectOnIsVisibleChanged;
        base.OnDetaching();
    }

    private static void AssociatedObjectOnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        ScrollIntoFirstSelectedItem(sender);
    }

    private static void AssociatedObjectOnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ScrollIntoFirstSelectedItem(sender);
    }

    private static void ScrollIntoFirstSelectedItem(object sender)
    {
        if (!(sender is ListBox listBox)) 
            return;
        var selectedItems = listBox.SelectedItems;
        if (selectedItems.Count > 0)
            listBox.ScrollIntoView(selectedItems[0]);
    }
}

Add this behavior class to the xaml:

<ListView ItemsSource="{Binding Items}">
    <i:Interaction.Behaviors>
        <behaviors:ScrollToSelectedListBoxItemBehaviour />
    </i:Interaction.Behaviors>
</ListView>
Sergey Smolnikov
  • 739
  • 10
  • 16
  • This works like a charm. The new package for this is `Microsoft.Xaml.Behaviors.Wpf` as the `System.Windows.Interactivity.WPF` is depreciated. – Skint007 Apr 11 '22 at 03:11
-1

This might help you, i'm not sure if it's what you're looking for but it brings the selected item into view and scrolls to it for you if necessary.

 int selectedIndex = listView.Items.IndexOf((listView.SelectedItems[0]))

 listView.Items[selectedIndex].EnsureVisible();
David Swindells
  • 631
  • 1
  • 12
  • 28