我有一個視圖,它具有綁定到我的ViewModel(MVVM模式)的項目列表。MVVM。在某些情況下向View添加代碼是否合理?
比方說,它看起來像這樣:
<ScrollViewer Width="Auto" Height="Auto">
<ItemsControl ItemsSource="{Binding Path=MessageLog}"
Grid.IsSharedSizeScope="True"
ScrollViewer.CanContentScroll="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" SharedSizeGroup="FullName"/>
<ColumnDefinition Width="*" SharedSizeGroup="MessageLog"/>
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock Text="{Binding Path=PostedBy.FullName}" />
<TextBlock Text="{Binding Path=DatePosted}" />
</StackPanel>
<TextBlock Grid.Column="1" Text="{Binding Path=MessageLog}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
當用戶添加的東西MessageLog(存在虛擬機屬性MessageLog)我要自動滾動到最近的項目。
換句話說,我只是想在用戶輸入消息並點擊輸入時自動移動滾動條(就像Skype一樣)。
在MessageLog上的綁定按預期工作,並在視圖上更新項目。 (我很高興這一點,我想離開它那樣)
我想知道如果使用MVVM模式的方法,我仍然可以在視圖的文件後面的代碼中實現自動滾動?這似乎是相當邏輯的,因爲滾動行爲與虛擬機沒有任何關係,ViewModel也不知道任何有關View的內容。這樣對嗎?我正確的方式或者我錯過了什麼?
一般來說,向View添加實現有意義嗎?
任何附加的屬性/行爲的例子,我想更多地瞭解這個! – 2010-10-25 16:34:32
@pete:我寫了一篇描述使用行爲的文章:http://reedcopsey.com/2009/10/09/using-behaviors-to-allow-the-viewmodel-to-manage-view-lifetime-in-mv -vm/ – 2010-10-25 16:37:04
@pete:Nishant Sivakumar也將它移植到標準附屬支柱上。請參閱:http://reedcopsey.com/2010/04/15/attached-property-port-of-my-window-close-behavior/ – 2010-10-25 16:37:33