Mvvm交叉绑定数据上下文
Mvvm cross binding data context
我正在尝试实施 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 的文本和复选框绑定到父视图模型(即在主视图模型中 class)?
任何解决此问题的指示/帮助将不胜感激。
我已经浏览了以下链接..但是作为新手无法理解实现。
Binding button click in ListView template MvvMCross
MVVMCross changing ViewModel within a MvxBindableListView
我无法理解如何创建包装器 class 以及如何将项目模板 (list_Item.axml) 的数据上下文设置到此包装器 class。
它们在 mvvm 交叉中是否有任何方式,以便我可以将项目模板中的绑定直接引用到父视图模型,在我的例子中是 MainViewModel。
任何人都可以 post 一个更简单的例子吗?
谢谢
我不确定这是否是您要问的,但是要将此人的姓名绑定到列表项文本视图:
local:MvxBind="Text Name"
您应该使用 ObservableCollection 而不是使用 List
ObservableCollection<Person> _personCollection;
ObservableCollection<Person> PersonCollection
{
get { return _personCollection; }
set
{
_personCollection = value;
RaisePropertyChanged (() => PersonCollection);
}
}
对于复选框,我会向 Person class 添加一个字段,例如 IsSelected 并将其绑定到复选框:
local:MvxBind="Checked IsSelected"
我正在尝试实施 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 的文本和复选框绑定到父视图模型(即在主视图模型中 class)?
任何解决此问题的指示/帮助将不胜感激。
我已经浏览了以下链接..但是作为新手无法理解实现。
Binding button click in ListView template MvvMCross
MVVMCross changing ViewModel within a MvxBindableListView
我无法理解如何创建包装器 class 以及如何将项目模板 (list_Item.axml) 的数据上下文设置到此包装器 class。 它们在 mvvm 交叉中是否有任何方式,以便我可以将项目模板中的绑定直接引用到父视图模型,在我的例子中是 MainViewModel。
任何人都可以 post 一个更简单的例子吗? 谢谢
我不确定这是否是您要问的,但是要将此人的姓名绑定到列表项文本视图:
local:MvxBind="Text Name"
您应该使用 ObservableCollection 而不是使用 List
ObservableCollection<Person> _personCollection;
ObservableCollection<Person> PersonCollection
{
get { return _personCollection; }
set
{
_personCollection = value;
RaisePropertyChanged (() => PersonCollection);
}
}
对于复选框,我会向 Person class 添加一个字段,例如 IsSelected 并将其绑定到复选框:
local:MvxBind="Checked IsSelected"