2010-11-12 62 views
6

我正在使用视图模型绑定到列表视图。每次我在视图模型内部可观察集合中添加一个项目时,我都会用list.Count-1触发一个LastIndex属性。列表视图绑定到VM的这个LastIndex proeprty,并且listview正确选择添加到视图的最后一个项目。不幸的是,该视图无法将最后添加的项目滚动到视图中。如何在WPF中查看最后添加的列表视图ListView

我试着在列表视图标记上设置IsSynchronizedWithCurrentItem =“True”,但它没有帮助。

这是我使用

<ListView ItemsSource="{Binding Path=Status.Messages}" 
     SelectedIndex="{Binding Path=Status.LastIndex, Mode=OneWay}" 
     ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
     ScrollViewer.VerticalScrollBarVisibility="Auto" 
     HorizontalAlignment="Stretch" 
     Height="60" 
     IsSynchronizedWithCurrentItem="True" > 
    <ListView.Resources> 
     <Style TargetType="{x:Type GridViewColumnHeader}"> 
      <Setter Property="Visibility" Value="Collapsed" /> 
     </Style> 
    </ListView.Resources> 
    <ListView.View> 
     <GridView AllowsColumnReorder="False" > 
      <GridViewColumn> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Path=.}" FontWeight="Thin" /> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
    <ListView. 
</ListView> 

在这方面的任何帮助将是标记不胜感激

回答

15

你需要调用ScrollIntoView:

list.ScrollIntoView(list.Items[list.Items.Count - 1]); 

http://msdn.microsoft.com/en-us/library/system.windows.controls.listbox.scrollintoview.aspx

编辑:

而这里的一个办法做到这一点在XAML:这确实解决了它

http://michlg.wordpress.com/2010/01/16/listbox-automatically-scroll-currentitem-into-view/

+0

。感谢百万.. – siva 2010-11-12 20:12:05

+1

我打算在XAML中这样做,因为它是MVVM最正确的方式,但这太麻烦了。我很惊讶,这不仅仅是一个你必须设置为真或假的属性,取决于你是否希望它保持最新的焦点或不焦点。 – LJNielsenDk 2013-04-04 10:05:54