我正在使用如下所示的视图模型实例化视图:
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();
文本属性在视图模型中定义如下
private string myTextProp;
public string MyTextProp
{
get { return myTextProp; }
set
{
myTextProp = value;
RaisePropertyChanged(() => MyTextProp);
}
}
绑定最初在加载时有效。但是当我更改MyTextProp属性并且RaisePropertyChanged被称为UILabel时,UILabel没有更新。
我还绑定到一个工作正常且正常触发的 ICommand。
而不是做var myView = new MyView { DataContext = new MyViewModel() };
让 MvvmCross 通过这样做来构造你的 MvxViewController:
var viewController = this.CreateViewControllerFor<MyViewModel>();
CreateViewController
是 IMvxCanCreateTouchView
的扩展方法,因此您进行视图构造的类应该实现该 Inteface,否则该方法将不可用。
我知道IMvxCanCreateTouchView
是由MvxTouchViewPresenter
和MvxViewController
实现的,因此您可以从Presenter
或其他MxvViewController
调用该方法。