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



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

例如:

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

<Button
      android:text="Next"
      local:MvxBind="Enabled IHaveDoneEverything"/>

但是如何使用多个布尔值实现这一点呢?

我尝试过但不起作用的事情:

  • 在 axml 中使用 OR 语句。 local:MvxBind="Enabled (IHaveDoneThis | IHaveDoneThat)"
  • 在我的视图模型中使用额外的属性。由于属性未"设置",因此未在视图中更新,因此无法正常工作。

    public bool IHaveDoneAtleastSomething 
    { 
        get { return (IHaveDoneThis | IHaveDoneThat); } 
    }
    
  • 使用自定义值转换器。

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

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

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

为了将来参考,为了使额外的 ViewModel 属性正常工作,您必须确保 ViewModel 在 IHaveDoneThis 或 IHaveDoneThat 更改时调用额外属性的 RaisePropertyChanged 方法,否则绑定不会触发。

我通常做的是这样的:

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); } 
}

相关内容

  • 没有找到相关文章

最新更新