在单个使用 App 设计工具创建的 App 内共享数据
创建一个 App 时,您可以在该 App 的不同组件之间共享数据。使用属性是在 App 组件之间共享数据的推荐方法,因为 App 中的所有函数和回调都可访问属性。例如,您可以将值存储在属性中,然后使用不同 App 组件更新该值。
如果您定义一个 App 属性,您可以使用以下语法在 App 代码中的任何位置访问属性值:
app.Property
同样,您可以使用以下语法访问 App UI 组件的内置属性:
app.Component.Property
有关在多个 App 之间共享数据的信息,请参阅在多个使用 App 设计工具创建的 App 之间共享数据。
定义 App 属性
您可以选择将 App 属性定义为私有或公共,具体取决于数据所需的可访问性。使用私有属性存储仅在 App 内共享的数据。使用公共属性存储在 App 内外共享的数据(例如,脚本、函数或其他需要访问数据的 App)。
代码视图提供几种创建属性的方式:
在编辑器选项卡上,从属性按钮的下半部分展开下拉列表。选择私有属性或公共属性。

在代码浏览器中,点击属性选项卡,使用
按钮展开下拉列表,然后选择私有属性或公共属性。
在选择用于创建 App 属性的选项后,App 设计工具会在 App 代码中的 properties 块中添加一条属性定义和一条注释。
properties (Access = private) Property % Description end
properties 块是可编辑的,因此可以更改属性的名称并编辑注释,以描述该属性。例如,以下私有属性存储平均成本值。
properties (Access = private) X % Average cost end
要在 App 启动时设置属性值,您可以在 properties 块或 startupFcn 回调中指定默认值。例如,以下属性在 App 启动时的值为 5。
properties (Access = private) X = 5 % Average cost end
要限制某属性可以存储的值的类型,请在属性定义中将数据类型与该属性相关联。例如,以下代码要求赋给 X 属性的值必须为与 double 兼容的类型。X 属性将所赋的任何值存储为 double 类型。
properties (Access = private) X double = 5 % Average cost end
访问属性
定义 App 属性后,您可以使用语法 app.PropertyName 在 App 代码中的任何位置访问和设置属性值。例如,获取 X 属性的当前值,然后将其值设置为 10。
y = app.X % Get the value of X app.X = 5; % Set the value of X
也可以使用相同的语法在 App 外部访问公共属性。
App 组件还有内置属性。例如,如果您的 App 包含名为 Button1 的按钮组件,您可以使用 app.Button1 访问 Button 对象,并且可以使用 app.Button1.Text 访问按钮的内置 Text 属性。
示例:共享绘图数据和下拉列表选择
您可以通过使用一个组件设置 App 属性的值并从另一个组件访问该属性,在 App 内共享数据。在此示例 App 中,用户可以使用编辑字段组件设置绘图数据的采样大小,然后点击一个按钮组件以使用新采样大小绘制数据。
App 的右侧显示一个绘图。App 的左侧显示三个组件:Sample Size 编辑字段、Colormap 下拉列表和 Update Plot 按钮。

要使数据可供所有组件访问,请将数据存储在 App 属性中。在此示例中,App 将绘图数据存储在名为 Z 的私有属性中。
classdef ConfigurePlotAppExample < matlab.apps.AppBase % ... properties (Access = private) Z = peaks(35); % Surface data to plot end % ... end
您可以从 App 内的任何组件或函数访问 App 属性的值。在此示例中,App 内的 plotsurface 函数在绘制数据时访问 Z 属性的值。
function plotsurface(app) % Plot Z surf(app.UIAxes,app.Z); % Set the colormap cmap = app.ColormapDropDown.Value; colormap(app.UIAxes,cmap); end
您可以根据 App 用户与 App 的交互来更新 App 属性值。在此示例中,如果 App 用户更改了采样大小,编辑字段的回调函数会更新 Z 的值。
function SampleSizeEditFieldValueChanged(app,event) sampleSize = app.SampleSizeEditField.Value; % Update the Z property app.Z = peaks(sampleSize); end
如果 App 用户按下更新绘图按钮,其回调函数会通过调用 plotsurface 函数用 Z 的新值更新绘图。
然后,您可以通过从更新绘图按钮回调中调用 plotsurface 函数,用 Z 的新值更新绘图。
function UpdatePlotButtonPushed(app,event) plotsurface(app); end