2010-11-12 59 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