我有一个绑定到Collection的MvxListView
。当我第一次导航到ViewModel时,我从服务器加载数据并设置List。视图加载很棒。
然后我为OnScroll
设置了一个ListView
侦听器,以便在用户滚动到底部时可以加载下一页。我启动命令以使用如下命令获取结果的“下一页”:
this.ViewModel.ShowNextPageCommand.Execute(null);
Command最终调用一个方法,使用ViewModel中的某个状态来获取下一页,所有这些都工作正常但是当我真正去更新ListView绑定的Property时,我收到以下错误 - -
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Android.Util.AndroidRuntimeException: Exception of type 'Android.Util.AndroidRuntimeException' was thrown.
06-21 14:58:27.969 E/mono (28485): at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (IntPtr jobject, IntPtr jclass, IntPtr jmethod) [0x00023] in /Users/builder/data/lanes/monodroid-lion-bs1/0cc7ae3b/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:604
06-21 14:58:27.969 E/mono (28485): at Android.Widget.BaseAdapter.NotifyDataSetChanged () [0x00053] in /Users/builder/data/lanes/monodroid-lion-bs1/0cc7ae3b/source/monodroid/src/Mono.Android/platforms/android-14/src/generated/Android.Widget.BaseAdapter.cs:293
该属性如下所示:
private ICollection<Part> parts;
public ICollection<Part> Parts
{
get { return parts; }
set
{
this.parts = value;
RaisePropertyChanged(()=>Parts);
}
}
并且更新属性的代码如下所示:
private void HandlePartResults(PartsResults results)
{
if (this.Results == null)
{
this.Results = results;
this.Parts = results.Parts;
}
else
{
this.Results.Links.Clear();
this.Results.Links.AddRange(results.Links);
foreach (var part in results.Parts)
{
this.Results.Parts.Add(part);
}
Mvx.Trace(MvxTraceLevel.Diagnostic,Results.Parts.Count.ToString());
this.Parts = Results.Parts;
}
this.IsLoading = false;
}
我的布局如下所示:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/com.x3wire.mobile.android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ProgressBar
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
local:MvxBind="Visibility IsLoading,Converter=Visibility" />
<Mvx.MvxListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/PartResultsList"
local:MvxItemTemplate="@layout/partslistitem"
local:MvxBind="ItemsSource Parts; ItemClick ShowDetailCommand" />
</FrameLayout>
我也试过使用一个可观察的集合,但我得到了同样的例外。有什么明显的我在这里做错了吗?
答案 0 :(得分:0)
我最终弄明白问题是什么(根本不是MVVMcross问题)。一旦我修复了调试器,就会发现存在一些线程问题(并且OnScroll Listener被解雇的次数超过了它所需要的)。
简而言之,请确保您没有多个线程在绑定到视图的同时尝试修改集合,并确保您不尝试通过console.writes调试此类问题:D