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属性永远不会更新。我是否应该期望这应该有用?
谢谢, 乔恩
答案 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