2014-02-26 36 views
3

如何使用布爾值組合來設置MvxBind按鈕上的enabled屬性?MVVMCross MvxBind,將多個值綁定到一個屬性

例如:

使用一個布爾值,則與實現綁定:

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

但我怎麼實現這個使用多個布爾值?

事情我已經試過了沒有工作:

  • 在axml使用OR語句。 local:MvxBind="Enabled (IHaveDoneThis | IHaveDoneThat)"
  • 在我的ViewModel中使用額外的屬性。這不起作用,因爲該屬性未被設置,因此在視圖中未被更新。

    public bool IHaveDoneAtleastSomething 
    { 
        get { return (IHaveDoneThis | IHaveDoneThat); } 
    } 
    
  • 使用自定義值轉換器。

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

您是否嘗試過的邏輯,而不是按位OR?在https://github.com/MvvmCross中查看http://stackoverflow.com/questions/3154132/what-is-the-difference-between-logical-and-conditional-and-or-in-c和解析器中的答案/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding/Parse/Binding/Tibet/MvxTibetBindingParser.cs#L120 - 另外,我認爲你應該可以使用'或(Expr1,Expr2)' – Stuart

回答

5

使用||而不是|實際解決了這個問題。

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

以供將來參考,以獲得額外的視圖模型性質的工作,你就必須確保該視圖模型呼籲額外的屬性,只要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); } 
} 
+1

爲了將來的參考,有一些項目試圖幫助你做到這一點automagically - 特別是http://slodge.blogspot.co.uk/2013/07/intercepting-raisepropertychanged.html和http://slodge.blogspot.co。 uk/2013/06/intercepting-raisepropertychanged.html以及Fody - http://slodge.blogspot.co.uk/2013/07/awesome-clean-viewmodels-via-fody.html - 但是對於一次性案例全部這些都是過度殺傷:) – Stuart

+0

謝謝你的Stuart-Fody看起來很棒。已經通過T4模板生成RaisePropertyChanged內容,但看起來效果更好! – isaacmcn