我正在使用像这样的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。
答案 0 :(得分:1)
而不是var myView = new MyView { DataContext = new MyViewModel() };
让MvvmCross通过这样做构建你的MvxViewController:
var viewController = this.CreateViewControllerFor<MyViewModel>();
CreateViewController
是IMvxCanCreateTouchView
的扩展方法,因此您进行视图构建的类应该实现该Inteface,否则该方法将不可用。
我知道IMvxCanCreateTouchView
由MvxTouchViewPresenter
和MvxViewController
实施,因此您可以通过Presenter
或其他MxvViewController
来调用该方法。