2016-09-08 3 views
1

현재 저는 WPF로 C#을 배우고 있습니다. 내 메인 접근 방식은 가능한 한 MVVM 패턴을 사용하는 것이지만 지금은 다소 혼란 스럽다.ViewModel into

private DruckviewViewModel ViewModel { get; set; } 

public Druckview() 
{ 
    ViewModel = new DruckviewViewModel(); 
    DataContext = ViewModel; 
    InitializeComponent(); 
} 

이가보기에 뷰 모델을 구현하거나 그것을 할 수있는 더 나은 방법이있다 할 제안 된 방법이 있나요 : 내 모든 뷰에 대한 내 응용 프로그램에서

은 내가 뷰 모델이 있나요?

+0

이 방법이 작동 ViewModel의 유형에서 View를 분리 할 필요가 충족 될 때까지 현재의 솔루션 작품과 만족 사용자의 필요와 그냥 MVVMWPF로 시작하는이 그와 함께 계속하면? – Fabio

+0

WPF 채팅방에 자유롭게 들려주십시오. 우리는 MVVM을합니다. //chat.stackoverflow.com/rooms/18165/wpf –

+0

@Fabio 네, 꽤 잘 작동하고 있습니다. 하지만 모든 웹 사이트에는 "zero-codebehind"라는 말이 있기 때문에 다른 방법이 있어야한다고 생각했습니다. –

답변

1

MVVM은 코드 숨김을 의미하지 않습니다.

MVVM은 관심사를 분리하는 패턴입니다. 그것은 (외관의 순서대로)의 세 부분으로 응용 프로그램의 아키텍처를 분리하는 데 도움이 :
Model
View
ViewModel

Model 비즈니스 로직을 포함하는 클래스입니다.

View

코드가 버튼을 클릭 이벤트 핸들러의 예를 들어보기 만의 논리 ( 를 포함하지 않는 다른 하나의 텍스트 상자의 색상을 복사 코드 숨김 가지고 확인 만보기 관련 로직 (XAMLcode-behind)를 포함 뷰 클래스를 나타냅니다 ,

ViewModelView에 대한 참조없이보기의 동작을 나타냄) 물론 이는 XAML에서 수행 할 수 있지만,보기의 MVVM 점에서 그것은 중요하지 않습니다.Visibility보기 관련

public Visibility MyVisibility { get; set; } 

그래서 MVVM의 부품 간의 종속성 유형이 있기 때문에, 예를 들어 제 생각에이 속성이, MVVM 패턴을 위반하는 것입니다
주의 사항은 다음과 같이 진행됩니다

Model는 아무것도

모르는
ViewModel는 약 Model
View에 대한 ViewModel

알고 알고 ViewModel에 경계 얼마나 밀접하게 View

보기 ---> 뷰 모델 --->MVVM를 사용하는 모델

내 생각은 중요하지 않습니다. ViewModel의 속성과 명령을 사용하기 때문에 이미 제한되어 있습니다.

예를 들어 인터페이스를 ViewModel으로 사용하여 경계를 단단히 지정하지 않으면 실제 ViewModel없이보기를 테스트 할 수 있습니다 (예 : 자신의 "디자인 타임"보기 모델 만들기).

당신이 완전히 당신이 기대대로

1

MVVM 패턴에 실제로 적용되는 것은 아니지만보기가보기 모델에 직접 연결되어 있기 때문에 가능합니다.

대부분의 기존 MVVM 프레임 워크는 View Manager 개념을 사용합니다. 뷰 모델 인스턴스에서 뷰를 만들고이를 서로 연결하고 뷰를 표시하는 클래스입니다. 이 같은 끝낼 것 :

DruckviewViewModel vm = new DruckviewViewModel() 
ViewManager.Instance.DisplayViewFor(vm); 

그것은 DruckviewViewModelDruckview를 사용하는 명명 규칙에 따라, 알아낼 것이다. 뷰를 만들고, DataContextProperty를 설정하고, 뷰를 볼 수있게합니다.

이러한 프레임 워크 중 하나를 사용하지 않으면이 작업을 직접 수행 할 수 있지만 많은 경우 "모범 사례"패턴으로 간주됩니다.

기존 프레임 워크를 사용하는 것이 좋습니다. 해당 기능을 비교하는 좋은 목록은 here입니다.


BTW, 당신이보기의 생성자에서의 DataContext를 설정하지 않고 XAML 디자이너에서 IntelliSense를 활용하는 방법을 궁금해하는 경우. 이를 수행하는 적절한 방법은 XAML에 디자인 인스턴스를 추가하는 것과 같은 속성을 사용하는 것입니다.

d:DataContext="{d:DesignInstance local:DruckviewViewModel}" 
+0

깜짝 놀란 PRISM은 그 목록에 없습니다 ... –

+0

좋은 설명 주셔서 감사합니다. 내가 좀 쓸려고한다고 생각해. fr 이것에 대한 숙제 ... 나는 소프트웨어 회사에서 연수생이며, 코드를 작성할 때마다 내 상사가 '헤이, 내 코드 숨김 때문에 MVVM 패턴을 생각해'와 같다. –

+1

'ViewModel'에 묶여있는'View'가'MVVM' 패턴과 얼마나 밀접한 관계가 있다고 생각합니다. 왜냐하면'View'는 최소한 런타임에서'ViewModel'에 대해서 알 필요가 있기 때문입니다. 물론,이 연결을 완화하면 View를 디자인하고 사용하는 데 더 많은 가능성이 있습니다. – Fabio