列表框滚动条不跟随所选项目(使用 ICollectionView)
我正在尝试在 WPF 中实现 MVVM 模式。 我关注了 Jeremy Alles 的非常简单的 MVVM 演示应用程序。 我有一个与 ObservableCollection 绑定的 ListBox:
<ListBox
Name="myListBox"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Persons}">
<ListBox.ItemTemplate>
<DataTemplate>
<views:PersonsView />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我添加了一个 ICollectionView 来管理 ListBox 上的所选项目。 它还允许我有两个按钮,允许我选择列表中的上一个和下一个项目。
private void GoToPrevious()
{
this.collectionView.MoveCurrentToPrevious();
}
private void GoToNext()
{
this.collectionView.MoveCurrentToNext();
}
这一切都很好,但是,当所选项目位于列表框显示区域下方时,列表框的滚动条不会相应移动。
如何使列表框的滚动条/显示区域与所选项目同步?
I'm trying to implement the MVVM pattern in WPF. I've followed Jeremy Alles's Very simple MVVM demo application. I have a ListBox that has a binding to an ObservableCollection:
<ListBox
Name="myListBox"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Persons}">
<ListBox.ItemTemplate>
<DataTemplate>
<views:PersonsView />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
I added an ICollectionView to manage the selected item on the ListBox. It also allows me to have two buttons that allow me to select the previous and next items in the list.
private void GoToPrevious()
{
this.collectionView.MoveCurrentToPrevious();
}
private void GoToNext()
{
this.collectionView.MoveCurrentToNext();
}
It all works great, however, when the selected item is below the displayed area of the listbox, the listbox's scrollbar doesn't move accordingly.
How can I synchronize the scrollbar/display area of the ListBox with the selected item?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我已经找到答案了。
我需要使用
问题是我不想添加任何代码隐藏,因为我正在实现 MVVM。
解决方案是使用附加行为。 Josh Smith 有一篇关于此的精彩文章:WPF 中的附加行为简介。
我向 ListBox 中的项目样式添加了 Setter:
并添加了以下类(仅将 TreeView 从 Josh 的文章更改为 ListBox):
它有效!
I've found the answer.
I needed to use
The problem was that I didn't wanted to add any code-behind, as I am implementing MVVM.
The solution is using Attached Behaviors. Josh Smith has a great article about this: Introduction to Attached Behaviors in WPF.
I adedd a Setter to the style of the items in the ListBox:
And added the following class (only changed TreeView from Josh's article to ListBox):
It works!!