【问题标题】:Dynamic MULTIPLE choice fields using FormFlow in Microsoft Bot Framework在 Microsoft Bot Framework 中使用 FormFlow 的动态多个选择字段
【发布时间】:2016-06-07 02:33:25
【问题描述】:

假设您正在动态获取可以在航班上办理登机手续的乘客列表。用户需要能够从列表中选择任意数量的乘客来办理登机手续。我可以制作动态列表,但我不知道如何让它选择多个选项。我在动态字段上使用了 .SetAllowsMultiple(true) 但它不起作用。我查看了文档here 中的 formflow 示例,但该示例仅允许单个选择。你将如何使它与多个选择一起工作?

这是我在 CheckinDialog 类中放置的属性:

public string Passenger { get; set; }

这是我的动态字段:

.Field(new FieldReflector<CheckinDialog>(nameof(Passenger))
                                                        .SetAllowsMultiple(true)
                                                        .SetActive((state) =>
                                                        {
                                                            return CheckinDialog.Passengers != null && CheckinDialog.Passengers.Count > 0;
                                                        })
                                                        .SetPrompt(new PromptAttribute(Resources.Checkin.Passengers))
                                                        .SetType(null)
                                                        .SetDefine((state, field) =>
                                                        {
                                                            foreach (var pax in GetPassengers())
                                                                field
                                                                    .AddDescription(pax, pax)
                                                                    .AddTerms(pax, pax);
                                                            return TaskHelpers.FromResult(true);
                                                        }))

【问题讨论】:

  • 要获取多个值,您需要一个能够接受多个值的属性。因此,您可能需要 List 类型的属性。您可以查看 AnnotatedSandwich 示例。
  • 不幸的是,列表属性似乎不适用于动态字段:(
  • 确实不支持列表属性(获取 NotImplementedException)。作为一种解决方法,您可能会立即恢复到 generating an Enum,但不确定您是否想要这样做。

标签: c# botframework


【解决方案1】:

一种解决方法是多次启动表单,这意味着一旦您第一次填写表单并选择了一名乘客,在表单完成的回调中,您可以提示用户是否要检查其他乘客。如果答案是肯定的,您可以再次启动表单。

这意味着您必须保留对乘客的选择,并使用它来过滤要在表单中显示的乘客列表(以避免两次为乘客办理登机手续)。

Here is some sample code 显示方法(缺少 PromptConfirm 对话框)

【讨论】:

  • 是的,如果您不介意发布一些 sn-ps,那就太好了!
  • 当然。我刚刚用我创建的示例链接更新了帖子。
  • 很高兴它对您有所帮助。请考虑将问题标记为已回答:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 2023-04-08
相关资源
最近更新 更多