2016-09-01 4 views
0

나는 Xamarin Forms에서 Prism을 사용하여이 문제에 대한 올바른 접근법을 찾으려고 노력했다.Xamarin + Prism : 버블 속성이 계층 모델/뷰 모델에서 이벤트를 변경하거나 ...?

나는 다른 클래스 인 Address를 속성으로 포함하는 Customer 클래스를 가지고있다. 내 견해로, 두 개체의 필드를 보여줍니다. "저장"버튼을 사용하고 싶습니다.이 버튼은 모델을 변경 한 후에 만 ​​활성화됩니다.

이제 버튼은 DelegateCommands에서와 마찬가지로 해당 CanSave() 함수를 사용하여 Command에 바인딩됩니다. 내가보기 모델에서 하나의 IsDirty 속성으로 끝날 수있는 접근법을 찾으려고 노력 중입니다.이 속성은 기본 모델로 변경된 후에 "true"가됩니다.

MVVM 접근 방식을

나는 "순수한"MVVM 접근 방식이라고 생각 우선. 각각의 게터/세터 가져 프리즘 BindableObject/시각적으로 구현 각 요소에 대한 속성 A "평면"보기 모델, 기본적인 모델 클래스로 /로부터의 값을 설정한다. 하지만 실패

,하는 SetProperty < 이후> 내 모델에서 속성을 사용할 수없는 심판 매개 변수를 가지고있다.

오버 엔지니어링 접근 [은?] 내가 생각

두 번째 것은 나의 내부 모델은 관찰 가능한 자체라면, 나는 나무를 통해, 그들 모두로부터의 변경을들을 수 있다고했다. 완전히 새로운 세상을 열어줍니다. 내 View 모델에 속성 변경 리스너를 등록합니까? 내부 모델을 관찰 할 수있게 만들고, 부모가 자녀들의 변화 사건을 경청하고 전파하도록합니까?

관측 가능한 모델에 빠르게 접근하면 이벤트 처리기가되지 않습니까?

그리고 마지막으로 가장 간단한 것은, 가능한 가장 간단한 것. ViewModel을 평면으로 관측 할 수 있습니다. 읽기만하면 값을 쓰거나 읽습니다. & 저장

너희들은 어떻게 생각하니?

답변

0

음, 결국 옵션 3으로갔습니다. 내가 할 수있는 가장 간단한 방법입니다.

필자의 모델에서 반환 할 속성을 쉽게 찾을 수 있으며 nullable [?.] 구문을 사용하면 null도 될 수 있지만 시간이 지나면 실제 내 UI 모델보다 더 친숙한/친숙한 속성을 모델 속성에 추가 할 수 있습니다. 다른 복잡성이 그 스벤의 도움을

0

은 어쩌면 내가 바로 질문을 이해하지 못했지만, 당신이 SetProperty처럼 같은 작은 도우미 함수에 자신을 제한하는 이유 궁금하네요. 그것에는 4 Lines of code이 있습니다. 평등을 확인하고, 가치를 설정하고, 사건을 제기하는 것뿐입니다.

이렇게 쉽게 다른 도우미 함수를 만들 수 있습니다.

class ViewModel : BindableBase { private Model Model { get; set; } public string Property { get { return Model.Property; } set { SetProperty(() => Model.Property, x => Model.Property = x, value); } } } 
,617 뷰 모델

protected virtual bool SetProperty<T>(Func<T> get, Action<T> set, T value, [CallerMemberName] string propertyName = null) 
{ 
    if (object.Equals(get(), value)) return false; 

    set(value); 
    OnPropertyChanged(propertyName); 

    return true; 
} 

모델

class Model 
{ 
    public string Property { get; set; } 
} 

을 MyBindableBase

매핑에 대한 이름 지정 규칙을 사용하거나 반사를 사용하면 사용량을 줄일 수 있다고 생각합니다.

+0

감사 스벤 마이클 Stübe 및 @adminSoftDK @ 많이 :) 다시는 내 마음을 바꿀

덕분에 저를 강제로 때까지

그래서, 나는, 그 갔다 대답 일 수 있습니다. 어제부터 내 자신의 SetProperty 도우미도 만들었으므로 이해할 수있는대로 프리즘을 사용하기 시작했습니다. – anjelinio

+0

그러나 이제 내 문제는 OnNavigatedTo가 내 모델이 아직로드되지 않은 초기 데이터 바인딩 이후에 호출된다는 것입니다./ – anjelinio

+0

MvvmCross에서'RaiseAllPropertiesChanged'를 쉽게 호출 할 수 있습니다. 프리즘에 비슷한 메커니즘이 있는지 확실하지 않습니다. OnPropertyChanged (string.Empty)를 호출 할 수 있습니까? –

관련 문제