Mvvm交叉绑定数据上下文

时间:2015-04-25 13:09:26

标签: android data-binding mvvmcross

我正在尝试实现mvvm交叉解决方案。我正面临绑定问题..

我正在尝试在xamarin.android中实现该解决方案。

下面是我的主要布局页面 - Main.axml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        local:MvxBind="Text Title/>
    <Mvx.MvxListView
        android:id="@+id/SRMTypeList"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:fastScrollEnabled="true"
        local:MvxItemTemplate="@layout/list_Item"
        local:MvxBind="ItemsSource PersonCollection" />
</LinearLayout>

以下是我的视图模型:

public class MainViewModel :MvxViewModel
{
    private string title;

    public String Title
    {
        get{ return title;}
        set
        {
            title = value; 
            RaisePropertyChanged (()=> Title);
        }
    }

    List<Person> _personCollection;       
    List<Person> PersonCollection
    {
        get { return _personCollection; }
        set
        { 
           _personCollection = value;
           RaisePropertyChanged (() => PersonCollection);
        }

    public MainViewModel()
    { 
        _personCollection = new List<Person>();
        PersonCollection.Add(new Person{Name="Steve", Salary=10000});
        PersonCollection.Add(new Person{Name="Mary", Salary=20000});
    }
}

MainView.cs

protected override void OnCreate (Bundle bundle)
{
     base.OnCreate (bundle);
     SetContentView (Resource.Layout.Main);
}

问题从主屏幕中的列表视图的项目模板开始,list_Item.axml如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <CheckBox
        android:id="@+id/checkbox2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        local:MvxBind="?" />

    <TextView
        android:textColor="#fff"
        android:textSize="16sp"
        local:MvxBind="?"/>
</LinearLayout>

如何将TextView的Text和CheckBox绑定到父视图模型(即在主视图模型类中)?。

任何有助于解决此问题的指针/帮助都将受到高度赞赏。

我已经通过以下链接...但是作为一个新手无法理解实施。

Binding button click in ListView template MvvMCross

MVVMCross changing ViewModel within a MvxBindableListView

我无法理解如何创建包装类以及如何将项模板(list_Item.axml)的数据上下文设置为此包装类。 是他们在mvvm中的任何方式交叉,以便我可以将项目模板中的绑定直接引用到我的案例中的父视图模型,即MainViewModel。

有人可以发布一个更简单的例子吗?     谢谢

1 个答案:

答案 0 :(得分:0)

我不确定您的要求是什么,而是将此人的姓名绑定到listitem textview:

local:MvxBind="Text Name"

而不是使用List,你应该使用ObservableCollection

ObservableCollection<Person> _personCollection;       
ObservableCollection<Person> PersonCollection
{
    get { return _personCollection; }
    set
    { 
       _personCollection = value;
       RaisePropertyChanged (() => PersonCollection);
    }

}

对于复选框,我会在Person类中添加一个字段,例如IsSelected,并将其绑定到复选框:

 local:MvxBind="Checked IsSelected"