2011-09-25 5 views
0

누구나 다음과 같은 시나리오에서 솔루션을 조언 해 줄 수 있습니까?한 뷰의 ViewModel에서 다른 뷰로 컬렉션을 전달하는 방법은 무엇입니까?

MVMS 응용 프로그램을 사용하여 기본 창에서 모달 창을 표시해야 viewModel 클래스에있는 Collection에 값을 추가해야합니다. 이를 수행하는 최선의 방법은 무엇입니까? 내말은. viewModel에서 일부 컬렉션을 변경해야합니다. 내 MainWindow는 viewMode에 대한 참조를 가지고 있습니다.

viewModel = new ExamViewModel(); 
this.DataContext = viewModel; 

하위 모델에도 viewmodel을 표시하는 것이 좋습니까? 또는이를 수행하는 "올바른"방법이 있습니다.

답변

0

@Marcelo가 제안했듯이, 새 하위 창을 여는 코드는 ViewModel의 일부 대리인과 함께 전달되어야합니다. 이 대리자는 자식 ViewModel (예 : ChildVM)을 만들고 속성 (예 : ChildCollection) 중 하나에 자체 컬렉션 (ParentVM.ParentCollection)을 채 웁니다.

var childVM = new ChildVM(); 
    childVM.ChildCollection = parentVM.ParentCollection.ToList(); 
    return childVM; 

이 그런 다음 자식 창가 새로 채워 모음 (ChildVM.ChildCollection) 속성을하고 "OK"/ 긍정 행동의 종류를 "저장"을 수행 한 후 준수 할 것, 폐쇄 자식 창 다시 위임/통보해야 과 같이 ... 다시 옛 컬렉션에 변경을 "통합"하는 부모의 ViewModel ...

parentVM.ParentCollection.Clear(); 
    parentVM.ParentCollection.AddRange(ChildVM.ChildCollection); 

이 방법에

  1. 변경 사항은 별도의 목록에서 수행된다. 데이터 무결성이 유지됩니다.
  2. 합법적 인 동작 (OK/SAVE) 만 변경 사항을 병합합니다.
  3. 자식 뷰 모델은 연결이 끊어진 데이터와 자식보기가 언로드되므로 쉽게 UI에서 뺐다가 메모리에서 삭제됩니다.
1

일반적으로 모달 창은 문제의 객체에 대해서만 알기 때문에 사용자가 새 객체를 채울 수 있습니다 (가능하면 기존 객체를 편집 할 수도 있음). 그런 다음 채워진 오브젝트를 콜렉션 업데이트를 담당하는 부모에게 다시 전달합니다.

관련 문제