2017-03-21 4 views
-1

MVVM-Pattern을 기반으로하는 WPF 응용 프로그램이 있습니다. 모두 잘 작동합니다. View-Model의 비즈니스 논리에서 몇 가지 대화 상자를 호출해야합니다. 인터페이스 (인터페이스 구현은 뷰 레이어에 있음)를 통해 구현했습니다. 대화 상자의 경우 부모 창을 설정해야하므로 인터페이스의 함수에 "parentView"라는 인수가 있습니다.MVVM 패턴이 손상 되었습니까?

내 ViewModel에는 부모 창에 대해 "개체"유형의 "보기"속성이 있습니다. 이 속성은 대화 상자의 인스턴스화에 대한 인수로 넣습니다.

"보기"속성이 "개체"유형의 것이기 때문에보기 레이어에서 설정되어 다시보기 레이어로 전달되므로보기 모델 레이어는보기 레이어와 아무런 관련이 없습니다.

MVVM 패턴을 깨뜨렸습니까?

답변

1

MVVM 패턴을 깨뜨렸습니까?

아니요.보기 모델은보기에 의존하지 않으며, 단원 테스트에서 쉽게 모의 할 수있는 인터페이스에 대해서만 알고 있습니다. 그래서 "보기"가 단지 어떤 것을 추상화하는 한 이것이 실제로 패턴을 깨지는 않습니다.

유형 안전성을 위해 매개 변수 유형을 object에서 강력한 유형의 인터페이스 유형으로 변경하는 것이 좋습니다.

+0

유형 안전과 관련된 힌트를 가져 주셔서 감사합니다. 정말 내가 생각할 것입니다. – Rekshino

1

친구가 없습니다.이 문제는 해결되었습니다. 모든 솔루션에는 진짜 아름다움이 없다는 것을 의미하지만 예를 들어 Dialog-Service를 사용할 수 있습니다.

여기에서 실제 구현은 Singleton이며 Main-Window이있는 정적 필드가 있습니다. 이제이 클래스에서 Dialog를 호출 할 수 있습니다. 예는 다음과 같이 진행을 위해

는 사실 MahApps을 생각하지만, 그들은 그것을 멋진 방법 등록 :

여기
<controls:MetroWindow 
     x:Class="SomeMetroWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls" 
     xmlns:Dialog="clr-namespace:MahApps.Metro.Controls.Dialogs;assembly=MahApps.Metro" 
     Dialog:DialogParticipation.Register="{Binding}"> <!-- watch this pls ---> 
<!-- ... ---> 
</controls:MetroWindow> 

일반적인 구현을위한 example입니다. 그리고 여기에 또 다른 arcticle이 주제의 arcticles에 대해.

내가 말했듯이 - 실제로는 아름답 지 않지만 해결되었습니다.

+1

안녕하세요. Peter, 답변 해 주셔서 감사합니다. 실제로 그것은 내 변형 된 대화 서비스 (적은 코드, 유연성)를 통해 저와 함께 작동합니다. 부모를 싱글 톤에 두는 것은 나에게 해결책이 아니다 (때로는 다른 부모가있다). – Rekshino

+0

일반적으로'WPF'에서는 자신의'DialogService'를 쓰는 것을 추천하지 않습니다. Windows-Store-Apps에서는 이미 "기본"솔루션이 있습니다. – Peter

관련 문제