MvxListView并向下滚动

时间:2014-05-03 19:19:08

标签: xamarin.android xamarin mvvmcross

我使用绑定到observablecollection的MvxListView来显示聊天消息。我发现listview总是以这两个属性向下滚动到底部:

android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"

当我通过命令向observablecollection添加消息时(当我自己发送消息时),当我通过viewmodel接收消息(通过signalr)然后以完全相同的方式添加消息时,这非常有用。 observablecollection,ListView已更新,但它不会向下滚动。当我手动向下滚动消息时,它不会自动向下滚动。我认为这可能与通过signalr到达的消息有关,因为它是异步回调。

我尝试手动强制列表视图在MvxAdapter中向下滚动,如下所示:

   public override void NotifyDataSetChanged()
    {
        base.NotifyDataSetChanged();
        ((FragmentActivity)_context).RunOnUiThread(() =>
        {
            _list.SetSelection(this.Count-1);
        });
    }

然后在消息到达时明确地调用它,但是也没有做任何事情。

帮助?

1 个答案:

答案 0 :(得分:2)

刚从Slodge看到这个答案:

Advice on where and when to use ObservableCollection in MvvmCross

UI更新必须同步完成。考虑到这一点,确实有道理。我的答案是使用:

MvxMainThreadDispatcher.Instance.RequestMainThreadAction(() => {
    // fill your collection in the viewmodel and do a propertychanged
});