MvvmCross(iOS)无法绑定UILabel派生类中的属性

时间:2014-02-02 22:42:00

标签: mvvmcross

MvvmCross noob在这里。有谁知道为什么我不能绑定UILabel派生类中的属性?

var set = this.CreateBindingSet<LoginView, LoginViewModel>();
set.Bind(_serverValue).For(p => p.Text).To(vm => vm.ServerListSelectedItem);
set.Bind(_serverValue).For(p => p.Visible).To(vm => vm.IsServerListAvailable);
set.Apply();

private class ServerValue : UILabel
{
  public bool Visible
  {
    get { return !Hidden; }
    set { Hidden = !value; LoginView.LayoutControls(); }
  }
}

文本会更新,但Visible属性永远不会更新。我是否应该期望这应该有用?

谢谢, 乔恩

1 个答案:

答案 0 :(得分:0)

MvvmCross使用Reflection - 而Reflection受.Net安全规则约束。

尝试制作控件public而不是private,看看是否有帮助 -

 public class ServerValue : UILabel ...`

除此之外,默认情况下MvvmCross中还有Visible注册的自定义绑定 - 请参阅https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding.Touch/MvxTouchBindingBuilder.cs#L45

        registry.RegisterCustomBindingFactory<UIView>("Visible",
                                                    view =>
                                                    new MvxUIViewVisibleTargetBinding(view));

您可能会发现这与[{1}}属性冲突(并隐藏) - 在反射之前检查自定义绑定 - 因此您可能需要选择其他属性名称。

有关绑定到自定义属性的更多信息以及有关自定义绑定的更多内容,请参阅http://mvvmcross.blogspot.com中的N = 19和N = 28