WPF 용 Python 래퍼와 DAG 지원을 사용하여 Python으로 응용 프로그램을 작성하고 있습니다. 현재 데이터와 뷰간에 일관된 상호 작용 방식을 결정해야하는 시점에 있습니다.
내가 아는 한 현재 두 가지 명백한 해결책이 있습니다.
첫 번째 는 Android 애플리케이션의 구조와 유사합니다. 보기를 설정 / 채우는 컨트롤러가 있습니다. 따라서 컨트롤러는 뷰를 소유하고 표시 될 기본 데이터 만 푸시합니다. 뷰는 단순한 레이어이며 어떤 일이 발생하고 데이터의 출처를 모릅니다. 그런 다음 사용자가 뷰와 상호 작용하면 콜백을 컨트롤러에 등록합니다 (등록 된 경우).
UserInfoController.py
userInfoView = UserInfoView()
userInfoView.onGenderChangedCallback = self.onGenderChangedCallback
userInfoView.setUserGenderValue(user.getGender())
UserInfoView.py
def setUserGenderValue(self, gender):
self.userGender = gender
def getView(self):
return ui.Label(self.userGender, onEditCallback=self.onGenderChangedCallback)
두 번째 모델은 (참조의) 모델을 뷰에 전달하고 뷰가 데이터를 검색하고 업데이트하도록합니다. 뷰에는 이제 모델이 포함되어 있으므로 컨트롤러에 대한 추가 콜백없이 업데이트 할 수 있습니다.
UserInfoViewModel.py
self.gender = 'Male'
UserInfoView.py
def getView(self):
return ui.Label(self.ViewModel().getGender(), onEdited=self.genderEdited)
def genderEdited(self, newValue):
self.ViewModel().setGender(newValue)
그래서 내가 요구하는 것은 매우 원시적 인 데이터를 전달하고 가능한 한 일반적인 뷰를 유지 한 다음 콜백으로 작업하고 컨트롤러에서 비즈니스 세부 사항을 수행해야한다는 것입니다.
또는 전체 모델을 뷰에 전달하고 뷰가 모델을 직접 업데이트하도록해야합니다. 즉, 입력 할 코드가 줄어 듭니다.
추신. 코드를 판단하지 마십시오. 단지 시각화를위한 것입니다.
편집하다:
또한 이 응용 프로그램은 ducktyping을 지원하는 파이썬으로 작성됩니다. 즉, 두 번째 방법을 사용하면 모델이 필요한 인터페이스를 충족하는 한 뷰를 계속 재사용 할 수 있습니다.