2009-10-16 29 views
5

Tôi có nhiều ListView với cùng một DataSource với IsSynchronizedWithCurrentItem="True" và tôi đang tự động thêm các mục vào Nguồn dữ liệu này.WPF ListView Luôn tập trung vào mục được thêm gần đây nhất?

Sự cố ist khi cuộn xuất hiện, các mục được thêm không hiển thị trừ khi tôi di chuyển thanh cuộn. Tôi có nên sử dụng một điều khiển khác cho mục đích này hay không hoặc làm thế nào có thể đưa mục được thêm vào lần cuối vào dạng xem (và thanh cuộn).

Cho đến bây giờ tôi đã làm mọi thứ trực tiếp trong XAML, vì vậy tôi đánh giá cao giải pháp như vậy nếu có thể.

Trả lời

1

Tôi đi kèm với một giải pháp:

Nó không thể được áp dụng trong mọi trường hợp, nhưng điều này là đủ!

Bí quyết là vô hiệu hóa thanh cuộn ListView và bao quanh nó bằng 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> 

Sau đó chỉ cần nếu cần gọi

MyScrollViewer.ScrollToEnd(); 
0

Điều đó nghe có vẻ đáng ngờ, nhưng ngay cả khi đó là sự thật, bạn luôn có thể gọi phương thức ListView.BringIntoView(), để ... đưa mục đã chọn vào xem :).

+0

Vâng .. bạn nói đúng, nhưng bạn phải viết thêm một chút mã để chọn mục cuối cùng và đưa nó vào xem .. nhưng đó cũng là một khả năng –

2

Tôi nghĩ rằng bạn có thể cần phải sử dụng phương pháp:

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

Hy vọng rằng sẽ giúp!

Các vấn đề liên quan