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