MvvmCross:RaisePropertyChanged没有更新绑定

时间:2016-01-21 08:57:56

标签: ios mvvmcross

我正在使用像这样的ViewModel实例化一个视图:

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

我想在应用程序的任何位置访问此视图,因此我将视图添加到rootviewcontroller:

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

ViewModel从MvxViewModel继承并且MyView从MvxViewController继承

在MyView中我将UILabel绑定到像这样的文本属性

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

text属性在ViewModel中定义,如此

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

绑定最初在加载时起作用。但是当我更改MyTextProp属性并调用RaisePropertyChanged时,UILabel没有被更新。

我也绑定了一个工作正常且触发正常的ICommand。

1 个答案:

答案 0 :(得分:1)

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

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

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

CreateViewControllerIMvxCanCreateTouchView的扩展方法,因此您进行视图构建的类应该实现该Inteface,否则该方法将不可用。

我知道IMvxCanCreateTouchViewMvxTouchViewPresenterMvxViewController实施,因此您可以通过Presenter或其他MxvViewController来调用该方法。