我正在用这样的 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>();
CreateViewController
是 IMvxCanCreateTouchView
的扩展方法,因此您在其中构建 View 的类应该实现该接口(interface),否则该方法将不可用。
我知道 IMvxCanCreateTouchView
是由 MvxTouchViewPresenter
和 MvxViewController
实现的,因此您可以从您的 Presenter
调用该方法或来自另一个 MxvViewController
。
关于ios - MvvmCross:RaisePropertyChanged 不更新绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34919216/