1

我在尝试将 mvxBindableListView 中的对象属性与 MVVMCross 和 Android 绑定时遇到问题。

类的结构如下:

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' 的元素数量,但行是空的。

有谁知道发生了什么?谢谢

4

1 回答 1

1

我尝试更改教程应用程序以使用电子邮件:

    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" };
    }
}

如果您的应用程序随后显示“TestValue”,那么您就知道绑定正在工作。

如果您需要显示正确的值,您有两种选择:

  1. 在将视图绑定到数据之前设置属性
  2. 不知何故,绑定链上的某处会发出 INotifyPropertyChange 事件的信号,以便绑定知道它必须刷新
于 2012-10-11T06:44:36.490 回答