我正在使用绑定到observablecollection的MvxListView来显示聊天消息.我找到了一种方法,列表视图总是向下滚动到这两个属性:
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);
});
}
然后在消息到达时明确地调用它,但是也没有做任何事情.
救命?
最佳答案 刚从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
});