Java와 C#을 알고 있지만 속성 바인딩은 C# MVVM에서만 알 수 있습니다. JavaFX에서 속성 값 (예 : C#)에 대한 사용자 정의 getter 및 setter를 사용하여 속성 바인딩을 이해하려고합니다.JavaFX Binding Setter 컨벤션
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());
}
}
내가 추천 자바 빈즈를 따르는 경우/자바 FX가 다음 바인딩 시스템이 반사를 사용하는만큼 영리 것, 명명 규칙 있다는 인상했다 및 사용 (?) :
나는 다음과 같은 클래스를 만들었습니다 속성에 대한 내 사용자 정의 getter/setter. 하지만 내 뷰 모델 getter/setter는 사용되지 않습니다.
대신 바인딩은 내 상호 작용없이 직접 속성의 get/set 메서드를 사용합니다. 나는 나는 다음과 같은 코드를 사용할 수 있음을 읽을 수는 있지만 이것보다 더 좋은 방법이 있어야한다 :
name = new SimpleStringProperty() {
@Override public void set(String value) {
// do something...
super.set(value);
}
};
내가 지정할 수있는 바인딩 내 속성을 설정/얻기 위해 사용해야하는 방법? 그리고 사이드 노트에서 어떻게 변경하지 않고 속성 (C#의 NotifyOfPropertyChange()가 변경되었음을 알릴 수 있습니까?
편집 :
내가 뭘하려고 좀 더 선택적 내 데이터 모델을 채 웁니다 나중에 값의 사용하려는 때문에, 내 속성으로 설정되고 끝나는 것과 같은 것입니다 (여기서는 생략).
C#에서는이 작업이 간단합니다. setter에 술어를 설정했습니다. 또한 다른 속성을 설정하는 것만으로 폼/마법사의 진행 상황을 조정할 수 있습니다.
public String Property {
get { return _property; }
set {
if(SomePredicate(value)) {
_property = value;
_nextButtonCommand.canExecute() = true;
// notify...
}
}
}
편집 응답에 대한 답변이 업데이트되었습니다. –