2
我試圖實現使用MVVM一個列表視圖的自動滾動。我知道你可以通過調用ScrollIntoView來更新列表視圖,但是這需要我試圖避免的代碼隱藏。列表視圖自動滾動使用MVVM
我必將我的ListView的的ItemSource到一個ObservableCollection,想ListView控件自動向下滾動到添加到日誌的最新項目。
<ListView ItemsSource="{Binding Log}"
SelectedIndex="{Binding SelectedLine}"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"
Grid.Row="1">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel>
</VirtualizingStackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Top" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="Type" Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Type}" HorizontalAlignment="Center"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
作爲替代方法,您可以添加新的項目,使用「插入」,而不是「添加」收集的開始。有時這很有用,特別是在日誌的情況下(Windows事件查看器作爲示例),因爲新事件顯示在頂部。 That's不完全的回答你的問題,但如果這種方法在你的情況下,合理的,你那倒必須做自動滾動的。 – icebat
在MVVM中使用Code-Behind沒有錯,如果它是特定於視圖的。例如,我經常使用代碼隱藏將焦點設置,運行動畫,改變控件的位置,等等。由於這些代碼視圖相關的,應該認爲後面跑,不符合商業邏輯視圖模型。 – Rachel