我正在我正在显示的ListBox
项目的某个页面中编写Windows Phone应用程序。
我的目标是在添加新项目时自动滚动ListBox
,但我无法实现这一目标。
我已经阅读了许多关于行为和触发器绑定的示例,但我无法做到这一点。
我无法为我找到有效的Event
,我可以简单地获取ScrollViewer
ListBox
并使用我的方法(这不一定需要像即):
var childscount = VisualTreeHelper.GetChildrenCount(MyListBox);
for (int i = 0; i < childscount; i++)
{
if (VisualTreeHelper.GetChild(MyListBox, i) is ScrollViewer)
{
var sv = VisualTreeHelper.GetChild(ic, i) as ScrollViewer;
sv.ScrollToVerticalOffset(sv.ScrollableHeight);
break;
}
}
如果我必须在代码隐藏中写这个,那就没有问题,因为我可以在将新项目添加到集合时引发方法。
问题是我试图在MVVM中这样做。
答案 0 :(得分:0)
你需要使用=&gt; listbox.ScrollIntoView(listbox.Items [listbox.Items.Count - 1]);但是现在你需要将selectedItem设置为last,并在添加项目时使用SelectionChanged来使用这个方法。
SelectedItem = yourList[yourList.lenght - 1]
SelectionChanged Event => listbox.ScrollIntoView(listbox.Items[listbox.Items.Count - 1]);
listBox.clearSelection
我认为它仍然有效。
答案 1 :(得分:0)
如果enyone将搜索示例,我发布我的解决方案:
public class ItemsControlBehavior : Behavior<ListBox>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.ItemContainerGenerator.ItemsChanged += ItemContainerGenerator_ItemsChanged;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.ItemContainerGenerator.ItemsChanged -= ItemContainerGenerator_ItemsChanged;
}
private void ItemContainerGenerator_ItemsChanged(object sender,
System.Windows.Controls.Primitives.ItemsChangedEventArgs e)
{
if (AssociatedObject.Items.Any())
{
AssociatedObject.ScrollIntoView(AssociatedObject.Items[AssociatedObject.Items.Count - 1]);
}
}
}