Windows Phone 8 ListBox MVVM滚动问题

时间:2014-03-24 22:38:13

标签: c# xaml mvvm windows-phone-8 windows-phone

我正在我正在显示的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中这样做。

2 个答案:

答案 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]);
        }
    }
}