2016-05-18 53 views
3

私はMVVMパターンを実装するためにPrism 6.1を使用しています。通知/確認ダイアログでは、msdnのプリズムライブラリページを使用した高度なMVVMシナリオについて詳しく説明したInteractionRequestとInteractionRequestを使用しています。私の質問は、私がMVVM内でOpenFileDialogを使う方法です。 Prismは、SaveダイアログとOpenダイアログで同様の機能を提供していません。 View & ViewModelに組み込むべきコードの例を教えてください。ありがとうございました。Prism MVVMを使用したOpenFileDialog

答えて

5

あなたは単にダイアログサービスを作成する必要があります。

public interface IDialogService 
{ 
    void Show(); 
} 

public class DialogService : IDialogService 
{ 
    public void Show() 
    { 
     //logic to show your dialogs 
    } 
} 

あなたのコンテナに登録していることを確認してください:

Conatiner.Register<IDialogService, DialogService>(do you want a singletone?); 

が次にいつでも好きなときに今それを呼び出すあなたのctor

public ViewAViewModel(IDialogService ds) { ... } 

にそれを求めます。

+0

こんにちはブライアン、私は大きなファンです! VMとmsgを交換するためにビューにコードを入力する必要はありますか? VMのNotificationRequestプロパティにバインドされている(View内の)InteractionRequestTriggerのようなもの?私はいつもダイアログサービスと一緒にメディエーターパターンを使用する必要がありますか?ありがとう。 – sophon234

+1

あなたは何を意味するのか分かりません。サービスを使用してダイアログを表示したい場合は、Commandを公開し、ExecuteでdialogService.Showを呼び出します。 –

+1

私が間違っている場合は、私を修正してください。すべてのメッセージとダイアログボックスはUIレイヤーで処理する必要があると私は考えましたか?例えば、VMがメッセージボックスを表示する必要がある場合、UIレイヤー(View)でInteractionRequestTriggerをトリガーするイベント(VMから)を発生させるだけです。しかし、VMから開いたダイアログボックスを表示する必要がある場合は、VMからdialogService.Show()を呼び出します。つまり、ここでVMとVIEWとの間に対話がない場合、VMはサービスを使用して開いているダイアログボックスを表示します。ありがとう。 – sophon234

0

1つは、専用のTriggerActionを使用します。

public class SelectFileAction : TriggerAction<FrameworkElement> 
{ 
    protected override void Invoke(object parameter) 
    { 
     ISelectFilePayload payload = notification.Content as ISelectFilePayload; 

     // Configure the open file dialog 
     Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); 
     dlg.Filter = payload.Filter; 

     // Show the dialog 
     Nullable<bool> result = dlg.ShowDialog(); 

     // Process dialog result 
     if (result == true) 
     { 
      // Return the name of the selected file in the payload 
      payload.Path = dlg.FileName; 

      // The Callback property, if set, contains the invoker's callback method 
      var callback = args.Callback; 

      // Call the invoker's callback if any 
      if (callback != null) 
      { 
       callback(); 
      } 
     } 
    } 
} 
関連する問題