1

ユーザーに販売注文ラインのグリッドを表示したいと思います。このグリッドでは、ユーザーは出荷する各行に金額を入力できます。[保存] ボタンを押すと、変更されたすべての行が処理されます。

+---+------------+---------+---------+--------+------------------+
| # | PartNumber | Ordered | Shipped | Descr. | Quantity to ship |
+---+------------+---------+---------+--------+------------------+
| 1 | A12356     | 10      | 5       | Wheel  | [ input field ]  |
+---+------------+---------+---------+--------+------------------+
| 2 | B54556     | 10      | 0       | Frame  | [ input field ]  |
+---+------------+---------+---------+--------+------------------+
                                                  [PROCESS BUTTON]

つまり、ユーザーは一度に複数の明細行の出荷金額を入力して [プロセス] をクリックできるということです。

ここまでは順調ですね。

私が達成したいのは、ユーザーがこのグリッドのセルをクリックできることです。

  • PartNumber をクリックします。部品の詳細を含む一般的なコンテンツ要素が開きます。
  • ShippedQty をクリックします。以前の出荷で一般的なコンテンツ要素が開きます。

アプリケーション全体でこれらの汎用コンテンツ要素を再利用したいと考えています。

(ユーザーが PartNumber をクリックできるテーブルは多数あります)

たとえば、PartNumber の詳細を表示している間、既に変更されている入力フィールド、スクロール位置などは、マスター ビュー (上記の表) でそのまま維持する必要があります。

私の質問:

このための適切な設計戦略は何でしょうか? WinForm では、詳細を含む新しいダイアログを開くだけです。これは UWP には適していないようです。

これまでのところ、次の代替案を考えました。

  • 2 つのペインを持つSplitView : (1:マスター) 販売注文明細ページと (2:詳細) ユーザーがクリックする列に応じてコンテンツが (再) 設定される詳細ページ。

    • Pro : 詳細ビュー内で Frame.Navigate() を使用できます。
  • ユーザーが PartNumber または Shipped Qty などをクリックするかどうかに応じて、コンテンツが (再) 設定されるContentPresenter 。

  • 詳細コンテンツ要素のContentDialog または ModalDialog 。

    • これは ContentDialog の使用方法ではないようです。一度に開くことができる ContentDialog は 1 つだけです。ContentDialog はデフォルトで、内部の UI 要素に応じて動的にサイズ変更されます。
  • 不足しているオプションはありますか?
4

1 に答える 1

2

「これは UWP には適していないようです。」

なぜそうならないのかわかりません。多くのオプションがあるため、どのフレームワークを使用しているかよりも、UI をどのようにフローさせたいかが重要です。私の経験はWPFです...必要に応じて使用してください。前述のように、UI をどのように表示するか、およびどれだけの作業を行うかによって異なります。私の場合、コンポーネント (パーツの詳細画面、以前の出荷画面) をホスト ページから完全に独立させ、ナビゲーションを妨げないようにしたかったのです。モーダル ダイアログ ウィンドウを使用することは、私にとっては良い選択でした (もちろん、唯一の選択ではありません)。

私のアプリでは、プレゼンテーション レイヤーの一部である Components というクラス ライブラリを追加します。アプリ全体で使用できるセレクター (CustomerSelector、PartSelector、OrderSelector...) と呼ぶコンポーネントを作成します。セレクターは基本的に、モーダル状態で開かれるウィンドウです。検索グリッドを表示し、セレクターのプロパティをオブジェクトまたはオブジェクトのコレクションに設定するか、ユーザーがキャンセルした場合は null に設定します。

    // this handles a button click event
    public async void SelectSeriesCommandHandler(object sender, ExecutedRoutedEventArgs e)
    {
        SeriesSelector selector = new SeriesSelector(true, WatchListSeries);  
        bool? result = selector.ShowDialog(); // grid with search options is displayed in modal dialog window

        if (result.HasValue && result.Value)
        {
            var series = selector.SelectedSeries; // use selected objects
        }
    }
于 2016-06-18T17:01:27.930 に答える