ExpressionEditor.EvaluateExpression 方法

定义

计算表达式字符串并提供控件属性的设计时值。

public:
 abstract System::Object ^ EvaluateExpression(System::String ^ expression, System::Object ^ parseTimeData, Type ^ propertyType, IServiceProvider ^ serviceProvider);
public abstract object EvaluateExpression (string expression, object parseTimeData, Type propertyType, IServiceProvider serviceProvider);
abstract member EvaluateExpression : string * obj * Type * IServiceProvider -> obj
Public MustOverride Function EvaluateExpression (expression As String, parseTimeData As Object, propertyType As Type, serviceProvider As IServiceProvider) As Object

参数

expression
String

要计算的表达式字符串。 该表达式不包含表达式前缀。

parseTimeData
Object

一个包含附加分析信息(用以计算 expression)的对象。 这通常是由表达式生成器提供的。

propertyType
Type

expression 绑定到的控件属性的类型。

serviceProvider
IServiceProvider

一个由设计器宿主提供的服务提供程序实现,用于获取其他设计时服务。

返回

Object

如果表达式计算成功,则为由计算的表达式字符串引用的对象;否则为 null

注解

视觉设计器宿主使用 EvaluateExpression 该方法来计算表达式,并为关联的控件属性提供设计时值。

视觉对象设计器使用 ExpressionBuilder.ParseExpression 该方法在设计时分析表达式字符串,然后使用分析的表达式数据调用该方法 EvaluateExpression 。 视觉对象设计器使用计算的表达式结果来分配在设计图面上呈现的控件属性值。

实施者说明

从类派生的 ExpressionEditor 类必须重写 EvaluateExpression(String, Object, Type, IServiceProvider) 方法,才能在设计时计算自定义表达式类型。

至少, EvaluateExpression(String, Object, Type, IServiceProvider) 实现必须使用以下步骤:

  1. 计算表达式字符串并确定表达式引用的对象。

  2. 如果无法计算表达式字符串,则返回 null

  3. 使用该方法IsAssignableFrom(Type)propertyType确定是否可以将引用的对象直接分配给控件属性类型,然后根据结果完成以下操作之一:

  • 如果可以直接将引用的对象分配给控件属性,则返回表达式的引用对象。

  • 如果引用的对象是简单类型(如字符串),则返回引用的对象。

  • 否则,请确定是否可以将引用的对象分配给或转换为属性类型。

  1. 使用CanConvertFrom对象propertyType上的TypeConverter方法来确定是否可以将引用的对象转换为控件属性类型,然后根据结果完成以下操作之一:
  • 如果对象可以转换为控件属性类型,请使用 ConvertFrom 该方法返回转换的对象。

  • 如果无法分配或转换为 propertyType引用的对象,则返回引用的对象。

(可选) EvaluateExpression(String, Object, Type, IServiceProvider) 实现可以使用 parseTimeData 实现提供 ParseExpression(String, Type, ExpressionBuilderContext) 的对象来优化或帮助计算输入表达式字符串。

适用于

另请参阅