【问题标题】:MVVMCross binding to badgevalueMVVMCross 绑定到徽章值
【发布时间】:2014-12-05 09:17:16
【问题描述】:

我正在尝试像这样绑定到 TabBarItem 的徽章值:

var set = this.CreateBindingSet<MyView, MyViewModel>();
set.Bind(ViewControllers[0].TabBarItem.BadgeValue).To(vm => vm.MyNumber);
set.Apply();

但我收到以下错误:

MvxBind: Error:   6.30 Empty binding target passed to MvxTargetBindingFactoryRegistry

但是,如果我像这样直接设置值,则会出现徽章:

ViewControllers[0].TabBarItem.BadgeValue = ((MyViewModel)ViewModel).MyNumber;

为什么绑定不起作用? 谢谢!

【问题讨论】:

    标签: xamarin mvvmcross


    【解决方案1】:

    这不起作用,因为如果您尝试绑定的对象尚未作为有效的绑定目标存在,则您需要设置自己的绑定扩展。

    看看here,Stuart 回答了一个关于 Android 的类似问题。

    【讨论】:

    • 感谢您的提示。对于 ios,我在 ios link 上找到了关于自定义绑定的演示文稿
    【解决方案2】:

    创建自定义绑定:

    public class TabBadgeBinding : MvxTargetBinding
    {
        public const string TargetPropertyName = nameof(TabBadgeBinding);
    
        private readonly UIViewController _viewController;
    
        public TabBadgeBinding(UIViewController viewController) : base(viewController)
        {
            _viewController = viewController;
        }
    
        public override Type TargetType => typeof(UIViewController);
    
        public override MvxBindingMode DefaultMode => MvxBindingMode.OneWay;
    
        public override void SetValue(object value)
        {
            if (value is string badgeValue)
            {
                _viewController.TabBarItem.BadgeValue = badgeValue;
            }
        }
    }
    

    在Setup.cs注册绑定:

        protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
        {
            base.FillTargetFactories(registry);
            registry.RegisterFactory(new MvxCustomBindingFactory<UIViewController>(TabBadgeBinding.TargetPropertyName, (controller) => new TabBadgeBinding(controller)));
        }
    

    在您的 VC 中使用绑定:

        set.Bind(ParentViewController).For(TabBadgeBinding.TargetPropertyName).To(vm => vm.UnreadNotificationsCount);
    

    【讨论】:

      猜你喜欢
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多