質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

3回答

1126閲覧

Prismを使用して複雑な選択ダイアログを表示する方法

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2018/09/04 12:31

前提・実現したいこと

Prismを使用して以下、画像の様な選択ボタンを押すと選択ダイアログが開き、
選択ダイアログには、さらにCodeをフィルタする検索するボタンがある。
フィルタして一覧に表示されたデータを選択し、選択ボタンを押すとCodeの値が呼び出し元画面に設定される。
という様な事を実現しようとしています。
しかし、画像のダイアログのように複雑な事を行っているダイアログのサンプルがなかなか見つかりません。

そこで、質問なのですが

Q1.そもそもPrismを使用してあまり複雑なDialogは使わないものなのでしょうか?
Q2.もし使わない場合、画像のような多くのデータから選択をさせるようなインターフェースはどの様に実現させるのが一般的なのでしょうか?

よろしくお願いいたします。

呼び出し元画面
イメージ説明
選択ダイアログ
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

こんにちは。

Q1.そもそもPrismを使用してあまり複雑なDialogは使わないものなのでしょうか?

私はよく使ってます。ひとつの意見としてご理解ください。
ダイアログがすべてのシーンで適切なわけではありませんが、ダイアログでいろいろ選択したり、処理を行うことが自然であると思えば、そうすることに躊躇しません。また、画面に情報を収めきることができない場合も必要ならばそうします。

Q2.もし使わない場合、画像のような多くのデータから選択をさせるようなインターフェースはどの様に実現させるのが一般的なのでしょうか?

ひとつの画面に選択項目を列挙できるならば、一緒にならべてしまえばよいと思います。
アイテムの一覧を隠さなくてもよいのであれば、選択ボタンをクリック、ダイアログでアイテム選択選択ボタンをクリックという手順のいくつかはパスできるので使い勝手がよくなる可能性があります。


Prismでダイアログを表示する場合、私が行う方法としては

  • 新しい項目の追加でウィンドウ(WPF)を追加
  • ViewModelとModelに相当するクラスを用意
    Modelに表示する情報のソース、および選択結果を格納する領域を準備
  • ViewModelのコンストラクタにModelを引数にするコンストラクタを作成
  • ViewのコードビハインドにModelを引数にするコンストラクタを作成
  • Viewに追加したコンストラクタ内でDataContextにViewModelのインスタンスをセット

csharp

1 // 一例です 2 public View(Model model) 3 { 4 InitializeComponent(); 5 INotifyPropertyChanged vm = new ViewModel(model, this.Close); 6 this.DataContext = vm; 7 }
  • ダイアログの呼び出し元でVieweModelのインスタンスを作成しShow()します。

ダイアログでの選択結果はModelのインスタンスに格納されるため、ダイアログが正常にクローズしたことを確認してModelのなかから結果を読み込めば良いと思います。
また、本来は単体テストやViewとViewModelの分離を考えれば、ダイアログを開くServiceを用意するのが妥当と思います。

Prism使ってないじゃん... と思われるかもしれませんが、ViewModelのクラスはBindableBaseを継承するでしょうから、ばっちり使っている体です。

参考になれば幸いでございます。

投稿2018/09/10 02:07

g_uo

総合スコア212

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/11 12:17

ご回答ありがとうございます。 Serviceを使ってやってみました。 やり方は色々あるってことですね~ 参考になりました。ありがとうございます。
guest

0

ベストアンサー

複雑なDialog

参考にすべきはこれ。
http://sourcechord.hatenablog.com/entry/2016/01/23/170753

public void ShowMessage(string message) { MessageBox.Show(message); }

ここを工夫する。
MessageBoxだけが、Showできるわけでもない。
別に、返り値はvoidしかできないわけではない。
VMでもいいじゃない。

Q2.もし使わない場合、画像のような多くのデータから選択をさせるようなインターフェースはどの様に実現させるのが一般的なのでしょうか?

トグルを使って、表示のONOFFをする感じで、選択できるようなUIは俺は好き。
ダイアログはうざくて嫌い。
https://code-examples.net/ja/q/176900

投稿2018/09/04 17:59

編集2018/09/04 18:00
kiichi54321

総合スコア1984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/07 03:54

ご回答ありがとうございます。 参考ページを見ながらなんとかダイアログできました。 結構コードビハインドにゴリゴリ書いてしまいましたが そんなもんだと割り切ることにしましたw トグルを使って行う方法もなんとなくカッコよさそう!! と思い、トグルのOnOffでDataGridの表示非表示が切り替わるような 感じでやってみたのですが、私のセンスの無さか思ったより かっこよくならず断念しました。。。
退会済みユーザー

退会済みユーザー

2018/09/11 12:13

参考にしてみます、ありがとうございました。
guest

0

Prism あまり関係ありませんね。
一例として次のようにするのはどうでしょうか。
選択ダイアログに次のメソッドを作成します。

C#

1public Item ShowDialog(ObservableCollection<Data> data);

選択ダイアログにリストアップされるデータ、つまりバインドされるデータを引数で渡します。
ダイアログが表示され、選択ボタンが押されたら選択されたデータを戻り値として返します。
この戻り値が null であればキャンセルされたとみなします。

投稿2018/09/04 12:44

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/07 03:55

ご回答ありがとうございます。 勉強中でまだよくわかっていないので、変な事を言っていたらご指摘ください。 Prismは基本的にShell上にあるRegionに(例えば~マスタメンテ画面とか~照会画面とか) のModuleを差し替えて画面表示する作りをするものと思っています。 なので、オープンしているWindowは1つだけで、複数のWindowがオープンするような アプリケーションの作りはPrismの機能が使えない?(もしくは使いづらい?)から すべきではないと思っています。 ※根拠は、確かそんなページを見た気がする程度ですが^^; InteractionRequestを使っても簡単なDialogはできそうでしたが、難しいダイアログを 作成するのは難易度が高そうに見えました。 というところから、複雑なDialogをオープンしようと思うとInteractionRequestでは難しそう かと言って複数Window開くことになるのはどうなの??? という事になりこの質問になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問