MVVMCross数据绑定无法正常工作

时间:2017-07-18 14:02:22

标签: xamarin xamarin.android mvvmcross

我的ViewModel中有自定义对象。

public MyObject PropertyName
{
    get { return _propertyName; }
    set
    {
        _propertyName = value;
        RaisePropertyChanged(() => PropertyName);
    }
}

我想在我的机器人视图中只将其成员之一绑定到textview。找到此链接: Bind data of custom object to TextView in MvvmCross 而我正是这样做的。 local:MvxBind =" Text Myobject.ItsMember"

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:text="LabelCaption" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:textColor="@android:color/white"
                    local:MvxBind="Text Myobject.ItsMember" />
            </RelativeLayout>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

检查了外壳等但是绑定没有工作,当我可以在调试窗口中打印时,我看不到屏幕上出现的字符串值。 我可能出错的任何线索?

2 个答案:

答案 0 :(得分:0)

我不能在我的头上重现你的问题。

我试过了:

public class MyViewModel : MvxViewModel
{
    private MyModel _model; // this is a class member variable or class member field
    public MyModel Model // this is a class member property
    {   
        get => _model;
        set => SetProperty(ref _model, value);
    }

    public MyViewModel()
    {
        Model = new MyModel { Name = "Herp" };
    }
}

public class MyModel : MvxNotifyPropertyChanged
{
    private string _name;
    public string Name
    {
        get => _name;
        set => SetProperty(ref _name, value);
    }
}

然后假设MyViewModel是DataContext,我使用:

进行绑定
local:MvxBind="Text Model.Name"

工作得很好。

答案 1 :(得分:0)

您无法绑定到某个类型。您需要绑定到该类型的实例。为了使绑定按照您在AXML中设置的方式工作,您需要类似

的内容
public class MyType
{
    private string _ItsMember;
    public string ItsMember
    {
        get
        {
            return _ItsMember;
        }
        set
        {
            _ItsMember = value;
            RaisePropertyChanged (()=>ItsMember);
        }
    }
}

private MyType _MyObject;
public MyType MyObject
{
    get
    {
        return _MyObject;
    }
    set
    {
        _MyObject = value;
        RaisePropertyChanged(()=>MyObject);
    }
}

这种安排将允许MyObject.ItsMember解析为字符串属性值。如果您的属性不是字符串值,则必须实现一个转换器,这是一个完整的主题。