당신의 편집기보기 및 NodeViewModel
의 어떤 종류에서 작동한다 브라우저보기 모두. 다른보기 시나리오에 대해서만 별도의보기 모델이 필요하지 않습니다.
이제 사용자에게 표시되지 않는 노드를 편집 할 수 있습니까? 아니요 (사용자가 편집 된 내용을 결정할 때와 같이),보기 모델은 사용자에게 콘텐츠를 처음 제출해야 할 때 만들어야합니다. 대부분의 경우 이는 일부 브라우저/세부 정보보기이므로 사용자가 요소를 선택할 수 있고 인 경우을 선택하여 편집 할 수 있습니다.
편집 :
의견에 대해서는. 편집기보기에 NodeViewModel
이 제공되어야합니다.
은 부분을 제공하며 예를 들어 constructor injection을 통해 또는보기의 데이터 컨텍스트를 수동으로 설정할 수 있습니다. 사용자가 브라우저보기의 모든 노드를 탐색 할 때 예를 들어, 그는 목록 항목 및 편집기 뷰를 더블 클릭 팝업됩니다
// this will probably be done in response to event
private void ListItemDoubleClick(object sender, EventArgs e)
{
NodeViewModel currentItem = // extract current list item
EditorView editorView = new EditorView(currentItem);
editorView.Show();
}
을 다른 방법으로, 이런 종류의를 피하려면 CompositeView
과 EditorView
사이의 강력한 결합은 항상 이벤트를 사용할 수 있지만 항상 필요한 것은 아닙니다.
디자인 측면에서 생각해 본 것 중 하나는 추가보기 모델을 추가하는 것이고 NodesListViewModel
입니다.프로그램 흐름이처럼 보일 수 있습니다 방법 : 수, 응용 프로그램 시작시
- 당신의 노드는
- 노드 개체의
IList<Node>
(목록에 의존 소요 NodeListViewModel
의 인스턴스를 생성 (DB, 파일, 서비스, 아무것도에서 수))
NodeListViewModel
구축하고
- 복합 뷰를 사용하여 주 프로그램 창,의 인스턴스를 생성
NodeViewModel
요소의 컬렉션을 노출합니다. 데이터 컨텍스트로 NodeListViewModel
이 필요합니다.
- 사용자가 항목을 편집해야한다고 결정할 때마다 모든 준비가 완료됩니다. 브라우저에는 모두
NodeViewModels
의 목록이 있으며 쉽게 현재를 집어 전용보기로 전달할 수 있습니다.
정확하게 이해하면 반점이 있습니다. NodeViewModel은 처음 사용할 때 생성해야하지만 다른 뷰가 필요할 때 NodeViewModel을 사용하려면 동일한 뷰 모델을 사용해야합니다. 내 질문은 - MVVM 패턴에서 실제로 viewmodel의 생성/캐싱이 발생합니까? 편집기가 특정 노드를 편집하려고 결정하면 해당 노드에 대한 NodeViewModel이 필요합니다. CompositionBrowser가 이미 해당 노드로 재미 있었으면 Editor는 CompositionBrowser와 동일한 NodeViewModel을 사용해야합니다. 그렇다면 그들은 둘 다 뷰 모델을 얻게됩니까? – Pygmy
@IUsedToBeAPygmy : 다소 일반적인 커뮤니케이션 관련 시나리오입니다. 편집을 참조하십시오. –
또 다른 옵션은 EditorView를 리소스의 뷰 모델 유형에 대한 'DataTemplate'로 지정하고 컨텐츠로 뷰 모델이있는 새 창을 팝업으로 열어 보는 것입니다. 나머지는 automagic이 될 것입니다. – user7116