2009-10-16 3 views
5

У меня есть много ListViews с тем же DataSource с IsSynchronizedWithCurrentItem="True" , и я динамически добавляю элементы к этому источнику данных.WPF ListView Всегда сфокусированный последний добавленный элемент?

Проблема есть, когда появляются свитки, добавленные элементы не отображаются, если я не перемещаю полосу прокрутки. Должен ли я использовать другой элемент управления для этой цели .. или как можно отобразить последний добавленный элемент (и полосы прокрутки).

До сих пор я делал все непосредственно в XAML, поэтому я был бы признателен за такое решение, если это возможно.

ответ

1

Я пришел с решением:

Это не может быть применен во всех случаях, но это один это достаточно!

Хитрость отключает полосы прокрутки ListView и окружает их с помощью ScrollViewer.

...

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> <!-- This is needed! --> 
     ... 
    </Grid.RowDefinitions> 

..

<ScrollViewer x:Name="MyScrollViewer" Grid.Row="0" > 
      <ListView Name="MyListView" 
         ItemsSource="{Binding}" 
         IsSynchronizedWithCurrentItem="True" 
         ScrollViewer.VerticalScrollBarVisibility="Disabled" /> 
</ScrollViewer> 

...

</Grid> 

Тогда просто при необходимости вызова

MyScrollViewer.ScrollToEnd(); 
0

Это звучит подозрительно, но даже если это правда, вы всегда можете вызвать метод ListView.BringIntoView(), чтобы ... отобразить выбранный элемент в поле зрения :).

+0

Да, вы правы, но вам нужно написать немного больше кода, чтобы выбрать последний элемент и привести его в поле зрения .. но это тоже возможно –

2

Я думаю, что вам, возможно, придется использовать метод:

ListView.ScrollIntoView(ListView.SelectedItem); 
1
if (!(myListView.Items.IsEmpty)) 
{ 
    myListView.ScrollIntoView(myListView.Items[myListView.Items.Count - 1]); 
} 

Надежда, что помогает!