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

由設計主機提供的服務提供者實作,用於取得額外的設計時服務。

傳回

若運算式運算成功,則為該受評估式字串所參考的物件;否則,。 null

備註

視覺設計主機利用此 EvaluateExpression 方法評估表達式並提供相關控制屬性的設計時值。

視覺化設計師在設計時使用該 ExpressionBuilder.ParseExpression 方法解析表達字串,然後用解析後的表達式資料呼叫該 EvaluateExpression 方法。 視覺設計師會利用評估後的表達式結果來指派控制屬性值,這些屬性會被渲染在設計表面上。

給實施者的注意事項

從該 ExpressionEditor 類別衍生的類別必須在設計時覆寫該 EvaluateExpression(String, Object, Type, IServiceProvider) 方法以評估自訂表達式類型。

至少, EvaluateExpression(String, Object, Type, IServiceProvider) 實作必須使用以下步驟:

  1. 評估表達式字串並確定該表達式所參考的物件。

  2. 若無法求值表達式字串,則回傳 null

  3. 使用 IsAssignableFrom(Type) 方法來 propertyType 判斷參考物件是否能直接指派到控制屬性類型,然後根據結果完成以下其中一個動作:

    • 如果參考物件可以直接指派到 Control 屬性,則回傳該表示式的參考物件。

    • 如果被參考的物件是簡單型別,例如字串,則回傳該物件。

    • 否則,判斷所參考物件是否能被指派或轉換為屬性類型。

  4. 使用CanConvertFrom物件上的 TypeConverter 方法propertyType判斷該物件是否能轉換為控制屬性類型,然後根據結果執行以下其中一個動作:

    • 如果物件可以轉換成控制屬性類型,請使用該 ConvertFrom 方法回傳轉換後的物件。

    • 如果無法將被引用的物件指派或轉換到 propertyType,則回傳該被參考的物件。

可選擇性地,實 EvaluateExpression(String, Object, Type, IServiceProvider) 作可利用 parseTimeDataParseExpression(String, Type, ExpressionBuilderContext) 作所提供的物件來優化或協助評估輸入表達字串。

適用於

另請參閱