我有很多ListView与IsSynchronizedWithCurrentItem="True"
相同的数据源,我动态地添加项目到这个数据源。WPF ListView始终关注最后添加的项目?
问题出在滚动条出现时,添加的项目不可见除非我移动滚动条。我应该为此使用另一个控件吗?或者如何将最后添加的项目放入视图(和滚动条)中。
到目前为止,我直接在XAML中做了所有事情,所以如果可能的话,我会很感激这样的解决方案。
我有很多ListView与IsSynchronizedWithCurrentItem="True"
相同的数据源,我动态地添加项目到这个数据源。WPF ListView始终关注最后添加的项目?
问题出在滚动条出现时,添加的项目不可见除非我移动滚动条。我应该为此使用另一个控件吗?或者如何将最后添加的项目放入视图(和滚动条)中。
到目前为止,我直接在XAML中做了所有事情,所以如果可能的话,我会很感激这样的解决方案。
我拿出一个解决方案:
它不能在所有情况下都适用,但它这一次它是足够的!
诀窍是 禁用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();
这听起来很可疑,但即使它是真的,您仍可以始终调用ListView.BringIntoView()方法,以将选定项目放入视图:)。
我想你可能需要使用方法:
ListView.ScrollIntoView(ListView.SelectedItem);
if (!(myListView.Items.IsEmpty))
{
myListView.ScrollIntoView(myListView.Items[myListView.Items.Count - 1]);
}
希望帮助!
是的..你是对的,但你必须写更多的代码来选择最后一个项目,并把它带入视图..但它也是一种可能性 – 2009-10-19 05:54:49