我知道Java和C#,但屬性綁定我只知道從C#MVVM。 我想了解JavaFX與自定義getters和setter屬性值(如在C#中)的屬性綁定。JavaFX綁定設置器公約
我創建了以下類:
public class ViewModel {
private StringProperty name;
public ViewModel() {
name = new SimpleStringProperty();
}
public final String getName() {
return name.get();
}
public final void setName(String name) {
this.name.set(name);
}
public StringProperty getNameProperty() {
return name;
}
}
public class Controller implements Initializable {
@FXML
private TextField nameField;
private final ViewModel viewModel;
public Controller() {
viewModel = new ViewModel();
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
Bindings.bindBidirectional(nameField.textProperty(),
viewModel.getNameProperty());
}
}
我下的印象是,如果我按照推薦的JavaBean/JavaFX的命名約定,那麼綁定系統會足夠聰明的使用反射和使用(?)我的屬性的自定義getter/setter。但我的視圖模型getter/setter從未使用。
相反,綁定使用屬性的get/set方法直接沒有我的交互。 我讀,我可以使用下面的代碼,但必須有比這更好的方式:
name = new SimpleStringProperty() {
@Override public void set(String value) {
// do something...
super.set(value);
}
};
我可以指定哪些方法綁定應該使用獲取/設置我的財產? 另外,我怎麼能通知該屬性已經改變(NotifyOfPropertyChange()在C#中),而不必改變它?
編輯:
我所試圖做的是多一點選擇,以被設置爲我的財產,因爲我想用它的價值以後,以填充我的數據模型是什麼結束(在這裏省略)。
在C#中這是微不足道的,我只是在setter中設置一個謂詞。通過設置其他屬性,我可以推動表單/嚮導的進度。
public String Property {
get { return _property; }
set {
if(SomePredicate(value)) {
_property = value;
_nextButtonCommand.canExecute() = true;
// notify...
}
}
}
更新回答以迴應編輯。 – 2014-10-22 12:02:26