如何使用布尔值的组合来设置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); }
}