C# MVVMCross MvxBind,将多个值绑定到一个属性

C# MVVMCross MvxBind,将多个值绑定到一个属性,c#,android,mvvmcross,valueconverter,mvxbind,C#,Android,Mvvmcross,Valueconverter,Mvxbind,如何使用布尔值组合来设置MvxBind按钮上的enabled属性 例如: 使用一个布尔值,通过以下方式实现绑定: <Button android:text="Next" local:MvxBind="Enabled IHaveDoneEverything"/> 使用自定义值转换器 local:MvxBind="Enabled [IHaveDoneThis , IHaveDoneThat], Converter=MultipleBooleansToOneBo

如何使用布尔值组合来设置
MvxBind
按钮上的
enabled
属性

例如:

使用一个布尔值,通过以下方式实现绑定:

<Button
      android:text="Next"
      local:MvxBind="Enabled IHaveDoneEverything"/>
  • 使用自定义值转换器

    local:MvxBind="Enabled [IHaveDoneThis , IHaveDoneThat], Converter=MultipleBooleansToOneBooleanUsingORValueConverter"/>

    • 使用| |而不是|实际上解决了这个问题

      local:MvxBind="Enabled (IHaveDoneThis || IHaveDoneThat)"
      

      为了便于将来参考,为了使extra ViewModel属性正常工作,您必须确保每当IHaveDoneThis或IHaveDoneThis发生更改时,ViewModel都会调用extra属性的RaisePropertyChanged方法,否则将不会触发绑定

      我通常是这样做的:


      您是否尝试过逻辑而不是按位或?另外,我认为您应该能够使用
      或(Expr1,Expr2)
      作为将来的参考,有一些项目试图帮助您自动完成这项工作-尤其是和Fody-但对于一次性情况,所有这些都是多余的:)感谢Stuart-Fody看起来很棒。已经通过T4模板生成了带有RaisePropertyChanged内容的属性,但这看起来更好!
      local:MvxBind="Enabled (IHaveDoneThis || IHaveDoneThat)"
      
      private bool _internalIHaveDoneThis;
      public bool IHaveDoneThis
      {
          get{return _internalIHaveDoneThis;} 
          set
          {
              if(_internalIHaveDoneThis != value)
              {
                  _internalIHaveDoneThis = value; 
                  RaisePropertyChanged(() => IHaveDoneThis);
                  RaisePropertyChanged(() => IHaveDoneAtleastSomething);
              }
          }
      }
      
      
      private bool _internalIHaveDoneThat;
      public bool IHaveDoneThat
      {
          get{return _internalIHaveDoneThat;} 
          set
          {
              if(_internalIHaveDoneThat != value)
              {
                  _internalIHaveDoneThat = value; 
                  RaisePropertyChanged(() => IHaveDoneThat);
                  RaisePropertyChanged(() => IHaveDoneAtleastSomething);
              }
          }
      }
      
      public bool IHaveDoneAtleastSomething 
      { 
          get { return (IHaveDoneThis | IHaveDoneThat); } 
      }