2013-07-22 17 views
0

此问题正在根据https://github.com/slodge/MvvmCross/issues/367线程中的讨论扎根。如何监听DataContext更改以相应地调整UI状态

如果我们在与MvvmCross框架建立绑定,然后我们就设置绑定控制使用bind()的属性(比如UILabel.Text),向()扩展了最近的例子:

this.DelayBind(() => { 
    var set = this.CreateBindingSet<KittenCollectionCell, Kitten>(); 
    set.Bind(NameLabel).To(kitten => kitten.Name); 
    set.Bind(PriceLabel).To(kitten => kitten.Price); 
    set.Bind(_loader).To(kitten => kitten.ImageUrl); 
    set.Apply(); 
}); 

(取自https://github.com/slodge/NPlus1DaysOfMvvmCross/blob/master/N-11-KittenView_Collections/KittenView.Touch/Views/KittenCollectionCell.cs

但是如果我想根据DataContext中的某些值调整我的UI状态会怎么样。例如,我想显示/隐藏一些按钮和标签并调整一些约束值。

if (((UserInfo)DataContext).IsAdmin) 
{ 
    SaveButton.Hidden = false; 
    SecurityLabelConstraint.Constant = 50; 

    /* etc */ 
} 

我该如何监听DataContext更改事件?这里推荐的方法是什么?

谢谢。

回答

0

到目前为止,我决定给每个控制或约束绑定到一个DataContext的相应属性,如:

this.DelayBind(() => { 
    var set = this.CreateBindingSet<UserCell, UserInfo>(); 

    set.Bind(SecurityLabelConstraint).For(p => p.Constant).To(info => info.IsAdmin) 
     .WithConversion(new ValueConverter<string>(s => s != null ? 20 : 0), null); 

    // etc... 

    set.Apply(); 
}); 

它工作得很好。