前提・実現したいこと
Prismを使用して以下、画像の様な選択ボタンを押すと選択ダイアログが開き、
選択ダイアログには、さらにCodeをフィルタする検索するボタンがある。
フィルタして一覧に表示されたデータを選択し、選択ボタンを押すとCodeの値が呼び出し元画面に設定される。
という様な事を実現しようとしています。
しかし、画像のダイアログのように複雑な事を行っているダイアログのサンプルがなかなか見つかりません。
そこで、質問なのですが
Q1.そもそもPrismを使用してあまり複雑なDialogは使わないものなのでしょうか?
Q2.もし使わない場合、画像のような多くのデータから選択をさせるようなインターフェースはどの様に実現させるのが一般的なのでしょうか?
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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 }
- ダイアログの呼び出し元で
Viewe
とModel
のインスタンスを作成しShow()
します。
ダイアログでの選択結果はModel
のインスタンスに格納されるため、ダイアログが正常にクローズしたことを確認してModelのなかから結果を読み込めば良いと思います。
また、本来は単体テストやViewとViewModelの分離を考えれば、ダイアログを開くService
を用意するのが妥当と思います。
Prism使ってないじゃん... と思われるかもしれませんが、ViewModelのクラスはBindableBase
を継承するでしょうから、ばっちり使っている体です。
参考になれば幸いでございます。
投稿2018/09/10 02:07
総合スコア212
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総合スコア1984
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/07 08:10
退会済みユーザー
2018/09/11 12:13
0
Prism あまり関係ありませんね。
一例として次のようにするのはどうでしょうか。
選択ダイアログに次のメソッドを作成します。
C#
1public Item ShowDialog(ObservableCollection<Data> data);
選択ダイアログにリストアップされるデータ、つまりバインドされるデータを引数で渡します。
ダイアログが表示され、選択ボタンが押されたら選択されたデータを戻り値として返します。
この戻り値が null であればキャンセルされたとみなします。
投稿2018/09/04 12:44
総合スコア28660
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/09/07 03:55
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/09/11 12:17