如何使用布尔值的组合,在enabled
按钮上设置MvxBind
属性?
例如:
使用一个布尔值,通过以下方式实现绑定:
<Button
android:text="Next"
local:MvxBind="Enabled IHaveDoneEverything"/>
但是如何使用多个布尔值实现它?
我尝试过的东西不起作用:
local:MvxBind="Enabled (IHaveDoneThis | IHaveDoneThat)"
在我的ViewModel中使用额外的属性。这不起作用,因为该属性未被“设置”,因此未在视图中更新。
public bool IHaveDoneAtleastSomething
{
get { return (IHaveDoneThis | IHaveDoneThat); }
}
使用自定义值转换器。
local:MvxBind="Enabled [IHaveDoneThis , IHaveDoneThat], Converter=MultipleBooleansToOneBooleanUsingORValueConverter"/>
答案 0 :(得分:5)
使用||而不是|实际上解决了这个问题
local:MvxBind="Enabled (IHaveDoneThis || IHaveDoneThat)"
答案 1 :(得分:1)
为了将来参考,为了使额外的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); }
}