Xamarin Android数据绑定与MVVM光

时间:2016-02-04 10:01:22

标签: c# android android-fragments xamarin mvvm-light

原始问题:

我尝试使用MVVM Light将我的ViewModel中的值绑定到Xamarin Android中的TextView时遇到问题。值会更改一次然后停止工作。即使对象在ViewModel中发生更改,并且绑定模式也设置为默认值(OneWay)。

由于业务需求,我需要继续使用MVVM Light和Xamarin Android。

例:
在我的第一个片段中,我有一个书籍列表,这些书籍被绑定到我的ViewModel中的书籍列表。在我的Viewmodel中,我有一个名为CurrentBook的对象,它随着列表中的onclick事件而改变。

VM.CurrentBook = Books[index];

在我的第二个片段中,我将标题绑定到TextView

_titleBinding = this.SetBinding(() => VM.CurrentBook.Title, () => TitleTextView.Text);

当前图书首次从 NULL 更改为图书的实例时,标题会根据需要更改。在第一次更改 VM.CurrentBook = Books [index]; 之后,标题仍然与第一个选择的书籍相同。

更新:

我在 Milen Pavlov 的帮助下尝试过几件事, 我尝试过改为

VM.SetBinding(() => VM.CurrentBook.Title, TitleTextView, () => TitleTextView.Text, BindingMode.TwoWay);

这会触发错误:

System.Reflection.TargetException: Object of type '[Solution].Client.Shared.ViewModels.BooksViewModel' doesn't match target type '[Solution].Client.Android.BookDetailsFragment'



我尝试了另一件事:

_titleBinding = this.SetBinding(() => VM.CurrentBook.Title, TitleTextView, () => TitleTextView.Text, BindingMode.TwoWay);
enter code here

这引发了另一个错误:

System.Reflection.TargetException: Object of type 'Android.Support.V7.Widget.AppCompatTextView' doesn't match target type '[solution].Client.Android.BookDetailsFragment'

1 个答案:

答案 0 :(得分:0)

在xamarin android和mvvm-light上绑定数据时,我一直在使用此重载:

VM.SetBinding(() => VM.CurrentBook.Title, TitleTextView, () => TitleTextView.Text, BindingMode.TwoWay); 

希望它有所帮助。