2015-07-06 2 views
4

В RoboBinding есть аннотация DependsOnStateOf. При его использовании в PresentationModel, как это:Выполнение работ DependsOn в RoboBinding

@PresentationModel 
class GreetingPresentationModel { 
    String firstname; 
    String lastname; 
    //getters and setters for both 
    @DependsOnStateOf("firstname") 
    public boolean isLastnameInputEnabled() { 
     return !TextUtils.isEmpty(firstname); 
    } 
} 

Это не работает. Следующая привязка всегда будет ложной и не изменится.

bind:enabled="{lastnameInputEnabled}" 

Что случилось?

ответ

0

Заглядывая в примере RoboBinding AndroidMVVM, это имеет решающее значение для реализации HasPresentationModelChangeSupport с помощью PresentationModelChangeSupport и сделать сеттеры называют firePropertyChange:

@PresentationModel 
public class GreetingPresentationModel implements HasPresentationModelChangeSupport { 
    PresentationModelChangeSupport changeSupport; 

    @Override 
    public PresentationModelChangeSupport getPresentationModelChangeSupport() { 
     return changeSupport; 
    } 

    public GreetingPresentationModel() { 
     changeSupport = new PresentationModelChangeSupport(this); 
    } 
    // Rest of the code here 
    // Then change each setter, e.g. 
    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
     changeSupport.firePropertyChange("firstname"); 
    } 
} 
+2

вы можете добавить поддержку RoboBinding AspectJ, чтобы избежать ручного написания кода firePropertyChange. Он автоматически переплетается в коде firePropertyChange для вас. – Cheng

+0

@ Ченг есть способ, которым мы можем это сделать или firePropertyChange() изнутри ItemPresentationModel? – beerBear

+0

@ Ченг большое спасибо за работу, которую вы делаете для RoboBinding :) – beerBear

Смежные вопросы