2009-10-16 43 views
5

我有很多ListView与IsSynchronizedWithCurrentItem="True" 相同的数据源,我动态地添加项目到这个数据源。WPF ListView始终关注最后添加的项目?

问题出在滚动条出现时,添加的项目不可见除非我移动滚动条。我应该为此使用另一个控件吗?或者如何将最后添加的项目放入视图(和滚动条)中。

到目前为止,我直接在XAML中做了所有事情,所以如果可能的话,我会很感激这样的解决方案。

回答

1

我拿出一个解决方案:

它不能在所有情况下都适用,但它这一次它是足够的!

诀窍是 禁用ListView ScrollBars并用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

是的..你是对的,但你必须写更多的代码来选择最后一个项目,并把它带入视图..但它也是一种可能性 – 2009-10-19 05:54:49

2

我想你可能需要使用方法:

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

希望帮助!