UpdateContext 函数

适用于:画布应用

创建或更新当前屏幕的上下文变量

概述

使用 UpdateContext 函数创建上下文变量,该变量暂时保留一条信息,比如用户已选择某按钮的次数或数据运算的结果。

上下文变量的作用域限于一个屏幕,这意味着不能生成引用另一屏幕上的上下文变量的公式。 如果已使用另一种编程工具,可将上下文变量视为与本地变量类似。 使用 Set 函数来处理整个应用中可用的全局变量。

Power Apps 以公式为基础,这些公式会在用户与应用交互时自动重新计算。 上下文变量不具有此优势,因此在应用的创建和理解上可能难度更大。 使用上下文变量之前,请查看使用变量

描述

若要创建或更新上下文变量,请向 UpdateContext 函数传递一条记录。 在每条记录中指定的名称,用于定义或匹配变量的名称以及要将该变量设为的值。

  • 如果指定之前已定义的变量的名称,UpdateContext 会将该变量的值设置为指定的值。
  • 如果指定尚不存在的变量的名称,UpdateContext 会以该名称创建一个变量并将该变量的值设置为指定的值。
  • 如果之前已定义某变量,但未在这一特定 UpdateContext 公式中指定它,其值保持不变。

使用 UpdateContextNavigate 函数隐式创建上下文变量。 无需显式声明。 如果删除所有 UpdateContextNavigate 到上下文变量的引用,则该上下文变量将不复存在。 若要清除变量,请将其值设置为 Blank 函数的结果。

在创作环境中,可以使用“文件”菜单下的“变量”视图查看变量的值、定义和使用情况。

使用变量的列名称可引用公式中的上下文变量。 例如,UpdateContext( { ShowLogo: true } ) 创建一个名为 ShowLogo 的上下文变量,并将其值设置为 true。 然后可通过在公式中使用名称 ShowLogo 来使用此上下文变量的值。 可将 ShowLogo 编写为 Image 控件 Visible 属性的公式,然后根据上下文变量的值是 true 还是 false 来显示或隐藏该控件。

如本主题后面的示例所示,上下文变量可保留多种信息,包括:

  • 单个值
  • 记录
  • 对象引用
  • 公式的任何结果

上下文变量可保留其值,直到应用关闭。 如果定义一个上下文变量并在特定屏幕上设置其值,则该信息保持不变,即使用户切换到不同的屏幕。 应用关闭后,上下文变量的值将丢失,重新加载应用时则必须重新创建该值。

每个上下文变量的作用于限于一个屏幕。 如果想要在一个屏幕上定义上下文变量,但想要从另一个屏幕修改该变量,必须生成一个基于 Navigate 函数的公式。 或者,使用全局变量。

UpdateContext 没有返回值,只可以在行为公式中使用它。

语法

UpdateContext( UpdateRecord )

  • UpdateRecord – 必需。 一条记录,其中包含至少一列的名称以及该列的值。 将为每列和指定的值创建或更新上下文变量。

UpdateContext( { ContextVariable1: Value1 [, ContextVariable2: Value2 [, ... ] ] } )

  • ContextVariable1 - 必需。 要创建或更新的上下文变量的名称。
  • Value1 - 必需。 要分配给上下文变量的值。
  • ContextVariable2: Value2, ... - 可选。 要创建或更新的其他上下文变量及其值。

示例

公式 描述 结果
UpdateContext( { Counter: 1 } ) 创建或修改上下文变量 Counter,将其值设置为 1 Counter 的值为 1。 可通过在公式中使用名称 Counter 来引用该变量。
UpdateContext( { Counter: 2 } ) 将上一示例中 Counter 上下文变量的值设置为 2 Counter 的值为 2
UpdateContext( { Name: "Lily", Score: 10 } ) 创建或修改上下文变量 NameScore,分别将它们的值设置为 Lily10 Name 的值为 LilyScore 的值为 10
UpdateContext( { Person: { Name: "Milton", Address: "1 Main St" } } ) 创建或修改上下文变量 Person,将其值设置为一条记录。 该记录包含名为姓名地址的两列。 姓名列为 Milton地址列的值为 1 Main St Person 具有记录 { Name: "Milton", Address: "1 Main St" } } 的值。

使用名称 Person 整体引用此记录,或使用 Person.NamePerson.Address 引用此记录的单个列。
UpdateContext( { Person: Patch( Person, {Address: "2 Main St" } ) } ) 搭配使用 Patch 函数更新 Person 上下文变量,将地址列的值设置为 2 Main St Person 现在具有记录 { Name: "Milton", Address: "2 Main St" } } 的值。

分步示例 1

  1. 将默认屏幕命名为 Source,添加另一个屏幕,将其命名为 Target

  2. Source 屏幕上,添加两个按钮,设置它们的 Text 属性,让其中一个按钮显示英语,另一个显示西班牙语

  3. 英语按钮的 OnSelect 属性设置为此表达式:
    Navigate(Target, ScreenTransition.Fade, {Language:"English"})

  4. 西班牙语按钮的 OnSelect 属性设置为此表达式:
    Navigate(Target, ScreenTransition.Fade, {Language:"Spanish"})

  5. Target 屏幕,添加一个标签,将其 Text 属性设置为此表达式:
    If(Language="English", "Hello!", "Hola!")

  6. Target 屏幕上,在插入选项卡上选择形状,然后选择“返回”箭头。

  7. 将“返回”箭头的 OnSelect 属性设置为此公式:
    Navigate(Source, ScreenTransition.Fade)

  8. Source 屏幕上,按 F5,然后选择表示任一语言的按钮。

    Target 屏幕上,标签将以对应于所选按钮的语言显示。

  9. 选择“返回”箭头返回到 Source 屏幕,然后选择表示其他语言的按钮。

    Target 屏幕上,标签将以对应于所选按钮的语言显示。

  10. 按 Esc 返回默认工作区。

分步示例 2

  1. 打开您要在其中使用此公式的画布应用。
  2. 通过从命令栏中选择新屏幕来添加新的空白屏幕。
  3. 添加一个按钮,然后将其 OnSelect 属性设置为以下公式:
    UpdateContext( { Name: "Lily", Score: 10 } )