2014-04-22 2 views
0

ViewModel이 닫히지 않도록하고 모델 편집이 취소되지 않도록해야합니다. ViewModel에서 OnClosing을 재정의하려고 시도했지만 그 이벤트가 너무 늦게 나왔습니다. 모델 편집이 취소 된 후에 나타납니다. (저에게 이상한 이벤트 순서처럼 보입니다.)Catel에서 ViewModel이 닫히는 것을 방지하고 모델을 취소하는 방법

OnViewModelCanceling을 사용한다고 말한 이전 질문과 대답이 발견되었지만, 현재 버전에서는이 메소드가 overrideable로 존재하지 않습니다.

OnViewModelEvent가 발견되었지만 별칭으로, 내 ViewModel의 이벤트에 대해 호출되지 않습니다.

따라서 ViewModel에서 Cancel을 재정의하고 false를 반환하는 올바른 해결책입니까 아니면 ViewModel의 Canceling 이벤트에 등록해야합니까?

취소 무시를 사용하여 시도한 간단한 간단한 ViewModel 작동합니다. 그러나 현재 ViewModel에 ViewModels로 컨트롤이 중첩되어 있고 Cancel에서 false를 반환하는 경우 외부 ViewModel에서도 Cancel에 균열이 발생하지 않습니다. (어떤 의미가 있습니다.) 여기 내 문제는 때로는 Cancel을 존중하고 외부 ViewModel은 이것을 알고 있지만 중첩 된 ViewModel은 그렇지 않다는 것입니다. 이 문제를 여러 가지 방법으로 해결할 수 있다는 것을 알고 있지만이 새로운 문제를 해결하기 전에 모델 편집 취소를 방지하는 더 좋은 방법이 있는지 알고 싶습니다.

이것은 질문 당 하나의 규칙을 위반할 수 있지만 매우 밀접한 관련이 있습니다. 또한 ViewModel을 닫는 방법을 알 필요가 있지만 모델에 EndEdit (또는 CancelEdit)을 사용하지 마십시오.

Catel을 사용하는 WPF 응용 프로그램 3.9

답변

0

Save()를 재정의하고 false를 반환 할 수 있습니다. 최종 사용자가 이해하기가 어려울 수 있기 때문에 사용자 제어를 닫지 않도록하는 것은 어렵습니다.

012.SHF (base) 및 base.Cancel()이 모델 편집을 시작하므로 이 아닌 값을 반환하면 false를 반환합니다.

+0

성명서에 따르면 base.Save() 및 base.Cancel을 호출하면 모델 편집이 시작됩니다. ViewModelBase의 3.9 줄 1520 1 및 1528 코드는 단순히 True를 반환합니다. 나는 false를 돌려주는 것이 편집을 멈추는 것에 동의하지만, 적어도 (코딩 된 것들을 가지고있는) 또한 View가 닫히지 않도록하고 윈도우는 계속해서 표시됩니다. –

+0

죄송합니다.베이스에 대해 아무 것도 할 필요가 없습니다. 그건 오래 전이었고, 내가 이미 바꿨다는 것을 기억하지 못했습니다 :-). 소스에서 볼 수 있듯이 취소 및 저장에 대해 false를 반환하면 모델이 처리되지 않도록해야합니다. https://github.com/Catel/Catel/blob/develop/src/Catel.MVVM/Catel.MVVM.NET40/MVVM/ViewModels/ViewModelBase.cs#L1380 –

+0

을 참조하십시오.하지만 말씀 드렸듯이, 제가 가진 방법은 코드화 된 것, 저장 또는 취소 중 하나에서 false를 반환하고 뷰가 닫히지 않도록합니다. 그게 예상되는 행동인가요, 아니면 뭔가 잘못된 것이 있습니까? –