【问题标题】:Xamarin Android Data-Binding with MVVM LightXamarin Android 数据绑定与 MVVM Light
【发布时间】:2016-02-04 10:01:21
【问题描述】:

原始问题:

我在尝试使用 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 更改为 Book 的实例时,标题会根据需要更改。在第一次更改 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'

【问题讨论】:

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


    【解决方案1】:

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

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

    希望对你有帮助。

    【讨论】:

    • 在尝试这个之后我得到了这个错误:System.Reflection.TargetException: Object of type 'Android.Support.V7.Widget.AppCompatTextView' doesn't match target type 'Sollution.Android.BookDetailsFragment'
    • 你是在inflater.Inflate(..) 之后在OnCreateView() 中调用这个吗?
    • 即使在 vm System.Reflection.TargetException: Object of type 'sollution.Client.ViewModels.VM' doesn't match target type 'Sollution.Android.BookDetailsFragment'987654325@
    • sollution.Client.ViewModels.VM 的类型与您在Sollution.Android.BookDetailsFragment 中的ViewModel 的类型不同吗?
    • VM 是从 ViewModelBase 继承的 BookViewModel 类型,Sollution.Android.BookDetailsFragment 是从 Fragment 继承的 BookDetailsFragment 类型
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2023-03-15
    相关资源
    最近更新 更多