主要内容

在单个使用 App 设计工具创建的 App 内共享数据

创建一个 App 时,您可以在该 App 的不同组件之间共享数据。使用属性是在 App 组件之间共享数据的推荐方法,因为 App 中的所有函数和回调都可访问属性。例如,您可以将值存储在属性中,然后使用不同 App 组件更新该值。

如果您定义一个 App 属性,您可以使用以下语法在 App 代码中的任何位置访问属性值:

app.Property

同样,您可以使用以下语法访问 App UI 组件的内置属性:

app.Component.Property

有关在多个 App 之间共享数据的信息,请参阅在多个使用 App 设计工具创建的 App 之间共享数据

定义 App 属性

您可以选择将 App 属性定义为私有或公共,具体取决于数据所需的可访问性。使用私有属性存储仅在 App 内共享的数据。使用公共属性存储在 App 内外共享的数据(例如,脚本、函数或其他需要访问数据的 App)。

代码视图提供几种创建属性的方式:

  • 编辑器选项卡上,从属性按钮的下半部分展开下拉列表。选择私有属性公共属性

    Property button on the App Designer toolstrip, showing the options to add a private property or a public property

  • 代码浏览器中,点击属性选项卡,使用 Plus 按钮展开下拉列表,然后选择私有属性公共属性

    Properties tab in the Code Browser. The tab contains a search box to find properties and a plus button to add a new property.

在选择用于创建 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

另请参阅

主题