2011-03-28 7 views
0

개별 도메인 개체에 바인딩 된 일부 컨트롤이 있습니다. 이러한 객체를 통해 데이터베이스에 대한 몇 가지 기본 업데이트 작업을 구현해야합니다. MVVM 명령 바인딩을 사용하여 데이터베이스를 업데이트하고 있습니다. 문제는 기본적으로 원래 값을 다시로드하는 취소 버튼입니다. 일시적으로 데이터베이스에서 개체를 다시로드했지만 곧 변경해야합니다.WPF 데이터 바인딩 취소 작업

개체를 쉽게 복제 할 수 없으므로 개체를 완전하게 복사하고 수동으로 동기화하지 못했습니다.

UpdateSourceTrigger를 Binding을 명시 적으로 설정하고 UpdateSource를 수동으로 호출하는 것이 최상의 솔루션 인 것처럼 보이지만이를 구현하는 방법을 찾지 못했습니다. 뷰 모델 (또는 명령)에서 컨트롤을 볼 수있는 권한이 없으므로이를 찾을 수 없습니다.

아이디어가 있으십니까?

답변

0

article은 UpdateSourceTrigger Explicit과 관련하여 고민하고 있습니다. 나중에 동일한 문제가 발생했습니다 (보기 컨트롤에 대한 액세스가 필요했습니다). 그것은 View Model이 WPF View의 상태를 유지할 수있는 것이 아니라 데이터를 표시하는 방법이며이 경우 데이터는 데이터베이스에서 수분이 채워진 일부 엔티티라는 것을 발견했습니다.

나는 이런 식으로 뭔가를 할 것이다 :

[WPF보기 모델 -> 엔티티보기 모델] -> 엔티티 VM 엔티티로 변환 -> 데이터베이스. 당신의 ViewModel이의

Inestead :

public ObservableCollection<MyEntity> MyEntities

이 유무 : MyEntityViewModel이의 VM입니다

public ObservableCollection<MyEntityViewModel> MyEntities

을 내 Entity

설명해 드리죠 조금 더 : WPF 뷰 모델은 V로 래핑 된 데이터를 제공해야합니다. 엠. 이것은 발표 목적을위한 것입니다. 매우 복잡한 인구 통계 학적 개체 그래프가 있지만 이름, 생년월일 및 Blood Quantum 만 표시하면 어떻게됩니까? 객체 그래프를 탐색하는 것보다 세 가지 속성을 감싸는 뷰 모델 객체를 만드는 것이 훨씬 쉽습니다. 그래서 automapper 같은 도구가 존재합니다.

이 모든 이점은 무엇입니까?

  • 당신은 당신은 뷰 모델에 당신에게 엔티티를 묶어하지 않는

  • 하여 테스트 할 가짜 객체 그래프에 필요하지 않습니다. 취소하면 다시 얻을 필요가 없습니다. 유효성 검사가 성공할 때를 제외하고는 엔티를 만지지 못합니다.

물론 이것은 모든 시나리오에 맞지 않을 수도 있으며, 그 사이에 뭔가를 생각할 수도 있습니다.

HTH