2014-07-04 4 views
6

Ich habe ein Problem, wenn ich versuche, die "Enabled" -Eigenschaft meines Android Button an ein Boolean meines ViewModel mit dem MvvmCross-Framework zu binden und ich kenne das wirklich nicht Ursprung davon.Binden der Enabled-Eigenschaft einer Android-Schaltfläche mit dem MvvmCross

So habe ich eine Ansichtsmodell, das die beiden folgenden Eigenschaften enthält:

private ProjectDetailDTO _projectDetail; 
    public ProjectDetailDTO ProjectDetail 
    { 
     get { return this._projectDetail; } 
     set 
     { 
      _projectDetail = value; 
      RaisePropertyChanged(() => ProjectDetail); 
      RaisePropertyChanged(() => HasPicture); 
     } 
    } 

    private bool _hasPicture; 
    public bool HasPicture 
    { 
     get { return ((this.ProjectDetail != null) && !String.IsNullOrEmpty(this.ProjectDetail.Pictures)); } 
     set { _hasPicture = value; 
      RaisePropertyChanged(() => HasPicture); 
     } 
    } 

Wie würden Sie verstehen, meine Taste binden an die HasPicture Eigenschaft. So habe ich den folgenden Code für meine Button in meiner .axml Datei:

<Button 
    local:MvxLang="Text LblSeePicturesValue" 
    local:MvxBind="Enabled HasPicture,Click ShowProjectPicturesCommand" 
    android:id="@+id/buttonPictures" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" /> 

Ich glaube nicht, es ist ein Ansichtsmodell Problem, weil meine WP-Anwendung auch mit diesem Code funktioniert. Tatsächlich wird mein ProjectDetailDTO durch den Aufruf eines Web-Service, also durch eine asynchrone Methode, gefüllt. Ich denke, das ist der Grund, warum die HasPicture-Eigenschaft den falschen Wert hat, wenn die Bindung realisiert wird. Aber mit meinem ViewModel-Code sollte die HasPicture-Eigenschaft aktualisiert werden, wenn das ProjectDetailDTO gefüllt ist. Gibt es irgendetwas, was ich in meiner Android View falsch gemacht habe?

Danke für jede Hilfe!

Antwort

9

Ich denke, was Sie hier sehen, ist eine Interaktion zwischen ICommand.CanExecute und der Enabled Eigenschaft. Es gibt eine Diskussion darüber auf https://github.com/MvvmCross/MvvmCross/issues/729

Um dies zu umgehen, versuchen Sie die Bindung an Schalt:

local:MvxBind="Click ShowProjectPicturesCommand;Enabled HasPicture" 

(beachten Sie auch, dass der Separator in Bindings ist ein ; - nicht ein ,)

+0

Dank Sie wieder für deine Hilfe Stuart, ersetze meine Zeile durch deine "löste mein Problem. –