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 的详细信息时,已修改的输入字段、滚动位置等必须在主视图(如上表)中保持不变。

我的问题:

什么是合适的设计策略?在 WinForm 中,我只需打开一个包含详细信息的新对话框。这似乎不适合 UWP。

到目前为止,我想到了以下替代方案:

  • 具有两个窗格的拆分视图:(1:主)销售订单行页面和(2:详细)详细信息页面,其内容根据用户单击的列进行(重新)设置。

    • Pro:可以在详细信息视图中使用 Frame.Navigate()。
  • ContentPresenter的内容被(重新)设置取决于用户是否单击 PartNumber 或 Shipped Qty 等。

  • 详细内容元素的ContentDialog 或 ModalDialog

    • 这似乎不是 ContentDialog 的使用方式。任何时候都只能打开一个 ContentDialog,并且 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 回答