2010-04-28 5 views
1

여러 가지 다른 솔루션을 시도해 보았습니다. View.SetDialog가 필요합니다. ViewModelLocator 클래스를 사용하여 UnityContainer를 통해 팩토리로 만듭니다.대화 상자 (실제 것)

기본적으로보기에있는 단추 누름에서 일부 논리를 처리하고 결과적으로 호출자에게 결과를 반환하는 대화 상자 (생성자에서 매개 변수 몇 개 사용)를 작성해야하는보기 (및 ViewModel)가 있습니다. (계산 된 모든 논리의 결과와 함께).

아마도 내가 Windows Forms 관점에서 이걸보고있는 것이 틀림 없어.하지만 내가 뭘하고 싶은지 정확히 알고 WPF 및 MVVM을 사용하여 이상적으로하고 싶습니다. 나는이 프로젝트를 위해 노력하고 있으며 궁극적으로 바닐라 WPF로 돌아가서 그것을 작동시키기를 원하지 않는다.

답변

0

그렇게 할 수 있습니다. 페이지/사용자 정의/창 인스턴스를 만들고 instance.ShowDialog()으로 전화하십시오.

Here's my T4 templates 창을 닫기위한 메시징 및 다른 트릭을 사용하여보기 /보기 모델을 생성합니다.

2

나는 규칙을 위반하여 대화 상자를 구현했지만 최소한으로 줄이려고했다.

public void OpenDialog(DialogViewModel model) 
{ 
    this.MessengerInstance.Send<DialogViewModel, MainWindow>(model); 
} 

을 그리고 내 MainWindow를에 : 내 BaseViewModel의 방법 OpenDialog이

Messenger.Default.Register<DialogViewModel>(this, model => 
     { 
      // Instantiate the dialog box 
      var dlg = new DialogWindow(); 
      // Configure the dialog box 
      dlg.Owner = this; 
      dlg.Content = model; 
      // Open the dialog box modally 
      dlg.ShowDialog(); 
     }); 

그런 식으로 난 단지 내 ViewModel을 내 MAINVIEW 사이의 느슨한 결합이있다. 그것에 대해

public void CloseDialog() 
    { 
     this.MessengerInstance.Send<PopUpAction, DialogWindow>(PopUpAction.Close); 
    } 

(PopupAction 그냥 열거입니다) 내 DialogWindow 레지스터 :

Messenger.Default.Register<PopUpAction>(this, action => 
     { 
      switch (action) 
      { 
       case PopUpAction.Close: 
        this.Close(); 
        break; 
      } 
     }); 

당신은 또한 멀리 수신기를 떠날 수 당신은 폐쇄에 대해 동일한 작업을 수행 할 수 있습니다, 내 BaseDialogViewModel는 방법이있다 보기 클래스에서보기 클래스를 유지하기 위해 보낼 때, 그러나 그것은 받아 들일 수있는 해결책이라고 생각합니다. :)