ios - MvvmCross:RaisePropertyChanged 不更新绑定(bind)

标签 ios mvvmcross

我正在用这样的 ViewModel 实例化一个 View :

var myView = new MyView { DataContext = new MyViewModel() };

我想让这个 View 可以从应用程序的任何地方访问,所以我将 View 添加到 rootviewcontroller:

window.RootViewController.View.Add(myView.View);

其中ViewModel继承自MvxViewModel,MyView继承自MvxViewController

在 MyView 中,我将 UILabel 绑定(bind)到这样的文本属性

this.CreateBinding(myLabel).To<MyViewModel>(vm => vm.MyTextProp).Apply();

文本属性在 ViewModel 中是这样定义的

    private string myTextProp;
    public string MyTextProp
    {
        get { return myTextProp; }
        set
        {
            myTextProp = value;
            RaisePropertyChanged(() => MyTextProp);
        }
    }

绑定(bind)最初在加载时起作用。但是,当我更改 MyTextProp 属性并调用 RaisePropertyChanged 时,UILabel 未更新。

我还绑定(bind)到一个 ICommand,它工作正常并正常触发。

最佳答案

而不是做 var myView = new MyView { DataContext = new MyViewModel() };

让 MvvmCross 通过这样做构造你的 MvxViewController:

var viewController = this.CreateViewControllerFor<MyViewModel>();

CreateViewControllerIMvxCanCreateTouchView 的扩展方法,因此您在其中构建 View 的类应该实现该接口(interface),否则该方法将不可用。

我知道 IMvxCanCreateTouchView 是由 MvxTouchViewPresenterMvxViewController 实现的,因此您可以从您的 Presenter 调用该方法或来自另一个 MxvViewController

关于ios - MvvmCross:RaisePropertyChanged 不更新绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34919216/

相关文章:

ios - 在Xamarin.iOS Unified API中安装MvvmCross.Core

iphone - 在单独的 iOS 线程上延迟执行

ios - NEHotspotConfiguration 中的 joinOnce 是做什么的?

ios - Swift2运行时实例化UIStoryboard,失败如何处理?

android - 找不到 Mvvmcross MvxListview MvxItemTemplate 资源

c# - UI层如何访问GetSystemService(AudioService)

sqlite - MVVMCross SQLite 社区插件不会添加到 Xamarin Studio 项目

ios - 如何使用 Swift 从保存在文档目录中的文本中读取字符串?

ios - 每个人的Facebook应用测试

c# - 如何取消订阅 MvvmCross 中的 WeakSubscribe