2009-05-24 2 views
4

이 질문은 MVVM 패턴과 관련이 있습니다.이 포럼에서 빠르고 좋은 답변을 얻을 수 있으므로 패턴에 대한 혼란을 물어볼 생각이었습니다.MVVM 패턴과 GUI에서의 XAML의 동적로드에 관한 혼동

저는 MVVM 접근 방식에 새로 도입되었습니다. 나는 그 패턴을 고맙게 여기고 그 뒤에있는 원칙들을 이해한다. 어쩌면 나는 그 패턴 때문에 그다지 일하지 않았을 것이다. 그래서 그곳에는 약간의 혼란이있다.

XAML을 사용하여 WPF 페이지의 일부를 동적으로로드하고 MVVM 방식과 호환되기를 원하는 시나리오가있는 경우

혼란은 다음과 같습니다

  1. XAML 동적 뷰를로드의 논리가있는 곳.
  2. 내 WPF 페이지에 대해 하나의 ViewModel을 가져야하는지 아니면 각기 다른 부분에 대해 하나의 ViewModel을 가져야하는지 여부는 다른 viewmodel 클래스와 상호 작용하는 자체 viewmodel을가집니다.
  3. 코드 숨김 자체에서 C# 코드를 사용하여 GUI에 표시된 컨트롤 트리를 빌드해야한다면 어떻게 될까요? 코드를 사용하여 만든 컨트롤의 경우 뷰 자체의 코드 숨김에서 명령 바인딩을 수행해야합니다.

답변

1

로딩 로직이 실제로 패턴 자체로 처리되지 않는 부분입니다. Ward Bell이 흥미로운 blog post을 가지고 있습니다. 이 고양이를 껍질을 벗기는 방법에는 여러 가지가 있으며 모두 MVVM과 호환됩니다. 정말로 당신이 찾고있는 대답은 아니지만 정직합니다. 구의 블로그 게시물을 확인하십시오 ...이 주제에 대해 자세히 논의 할 것입니다.

페이지에 대해 하나의 VM을 보유할지 또는 각 관리 단위에 대해 하나의 VM을 보유할지에 따라 달라집니다. 일반적으로 페이지에 하나 있습니다. 다른 곳에서 재사용 할 수있는 부분이 있다면 자체 컨트롤을 사용하여 사용자 정의 컨트롤로 나눕니다. 이는 VM 내에 VM이 있음을 의미합니다. 나는 이것에 대해 로케 이어에 동의하지 않는다. V-VM-M에는 일대일 관계가 없습니다. 모델은 비즈니스 요구 사항에 따라 설계되었으며 프레젠테이션을 전혀 고려하지 않습니다. ViewModels는 프레젠테이션 요구 사항에 따라 설계되었으며 둘 이상의 모델을 캡슐화 할 수 있습니다. 실제로 많은 모델을 캡슐화하는 것이 일반적입니다.

로크 아이처럼, 나는 당신의 마지막 질문을 이해하지 못합니다.

+0

링크에 대한 답장 +1 –

0

또한 MVVM 아주 새로운 오전,하지만 난 대답을 시도합니다 : XAML 동적 뷰를로드하는 논리가있는

당신이 만약 "내 비즈니스 객체와 관련된 뷰를 어떻게 표시 할 수 있습니까?", IMHO,이 것에 대해 신경 쓸 필요가 없습니다. 일반적으로 VM에는 해당보기가 있습니다. dataTemplate을 사용하면 코드에서 VM 만 사용하지만 뷰는 자동으로 표시됩니다. 난 내 WPF 페이지 또는 각 별도의 부분에 대한 단일 뷰 모델을해야하는지 여부

이 다른 뷰 모델 클래스

당신이 상하 접근 방식을 보인다과의 상호 작용과 자신의 뷰 모델이있다. 나는 mvvm을 상향식 (모델 (비즈니스 객체) -> ViewModels -> Views)으로 더 많이 본다. 모든 모델에는 고유 한 ViewModel 및 뷰가 있어야합니다. 따라서 모델을 모델로하지 않는 한 viewModel에서 전체 WPF 페이지를 가질 수 없습니다.

3 코드 숨김 자체에서 C# 코드를 사용하여 GUI에 표시된 제어 트리를 작성해야한다면 어떻게 될까요? 코드를 사용하여 만든 컨트롤의 경우 뷰 자체의 코드 숨김에서 명령 바인딩을 수행해야합니다.

이해하지 못합니다. 나는 당신이 dataTemplate을 보아도 좋다고 생각한다.