尝试使用MVVMCross和Android绑定mvxBindableListView中对象的属性时遇到问题。
类的结构是下一个:
public class A
{
public string MyPropertyA1 { get; set; }
public int MyPropertyA2 { get; set; }
}
public class B
{
public int MyPropertyB1 { get; set; }
public int MyPropertyB2 { get; set; }
}
public class C
{
public int MyPropertyC1 { get; set; }
public A MyPropertyA { get; set; }
public B MyPropertyB { get; set; }
}
mvxBindableListView就是这样:
<?xml version="1.0" encoding="utf-8"?>
<Mvx.mvxBindableListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/Android.Client"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
local:MvxBind="{'ItemsSource':{'Path':'Results'}}"
local:MvxItemTemplate="@layout/detail_viewmodel" />
结果是:public ObservableCollection Results {get;组; } 而detail_viewmodel是:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/Android.Client"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="6dip"
android:layout_marginTop="6dip"
android:textAppearance="?android:attr/textAppearanceLarge"
local:MvxBind="{'Text':{'Path':'MyPropertyA.MyPropertyA1'}}" />
当应用程序运行时,它会向我显示mvxBindableListView,其中包含变量“Results”的元素数,但行是空的。
任何人都知道发生了什么?感谢
答案 0 :(得分:1)
我尝试更改Tutorial应用程序以使用电子邮件:
public class Thing
{
public string Life { get; set; }
public Thing()
{
Life = Guid.NewGuid().ToString();
}
}
public class SimpleEmail
{
public Thing MyThing { get; set; }
public string From { get; set; }
public string Header { get; set; }
public string Message { get; set; }
public SimpleEmail()
{
MyThing = new Thing();
}
}
包含以下内容的模板:
<TextView
android:id="@+id/email_header"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="6dip"
android:layout_marginTop="6dip"
android:layout_toRightOf="@id/email_from"
local:MvxBind="{'Text':{'Path':'MyThing.Life'}}"
/>
这显示了Guid的罚款。
查看您的代码,因为您的模型不支持INotifyPropertyChanged,那么我想知道您是否在绑定之前设置了ViewModel属性?
要解决此问题,我可以尝试:
public class A
{
public string MyPropertyA1 { get; set; }
public int MyPropertyA2 { get; set; }
}
public class B
{
public int MyPropertyB1 { get; set; }
public int MyPropertyB2 { get; set; }
}
public class C
{
public int MyPropertyC1 { get; set; }
public A MyPropertyA { get; set; }
public B MyPropertyB { get; set; }
public C()
{
MyPropertyA = new A() { MyPropertyA1 = "TestValue" };
}
}
如果您的应用随后显示&#34; TestValue&#34;然后你知道绑定工作正常。
如果您需要显示正确的值,您有两个选择: