绑定到对象属性

时间:2015-03-01 19:10:02

标签: xamarin mvvmcross

对于Xamarin iOS,是否可以绑定到viewmodel中的对象的属性。 例如。如果我们有以下对象:

public class MyObject: MvxNotifyPropertyChanged
{
    private bool isHidden;
    public bool IsHidden
    {
        get { return isHidden;}
        set { isHidden;= value; RaisePropertyChanged(() => IsHidden}
    }
}

以下ViewModel

public class MyViewModel
    : MvxViewModel
{
    public MyObject myObject;
}

在MyView网站上使用以下绑定

this.CreateBinding(myLabel).For("Hidden")
.To<MyViewModel>(vm => vm.MyObject.IsHidden).Apply();

这可能吗?

1 个答案:

答案 0 :(得分:2)

是的,你可以,我们在我们的应用程序中使用了很多次 如果我没记错的话,MvvmCross将这种绑定称为“链式绑定”。

但一定要注意在正确的线程上调用MyObject.PropertyChanged事件(更新视图UI的主线程)。
当你处于ViewModel级别时,MvvmCross只处理在主线程上调用PropertyChanged事件(看看MvxNotifyPropertyChanged对象实现)

在我的情况下正确的绑定语法是这样的(我希望它与你的相同......):

var set = this.CreateBindingSet<MyView, MyViewModel>();
set.Bind(yourLabel)
   .For(v => v.Hidden)
   .To(vm => vm.MyObject.IsHidden);
set.Apply();

此代码必须应用于MvxViewController