2012-04-08 81 views
0

我有一個自定義活動,用戶從重新主辦的設計器環境中的下拉列表中選擇一個變量。我的問題是我想獲得變量的名稱及其值。
假設我的自定義活動具有「InArgument MyVar {get; set;}」。 我目前通過解析「((Microsoft.VisualBasic.Activities.VisualBasicValue)MyVar.Expression).ExpressionText」來獲取變量的名稱。有沒有更好的方法?從InArgument獲取變量名稱

回答

0

直到運行時,才能確定地知道參數的真實值。

但是,你可以把它的默認值,使用這些擴展方法:

public static T GetImediateValueOrDefault<T>(Activity<T> activity, ModelItem modelItem) 
    { 
     if (activity == null) 
      return default(T); 

     var exprAsLiteral = activity as Literal<T>; 
     if (exprAsLiteral != null) 
      return exprAsLiteral.Value; 

     var exprAsVbValue = activity as Microsoft.VisualBasic.Activities.VisualBasicValue<string>; 
     if (exprAsVbValue != null) 
      return modelItem.GetDefaultValueOfScopedVariable<T>(exprAsVbValue.ExpressionText); 

     return default(T); 
    } 

    public static T GetDefaultValueOfScopedVariable<T>(this ModelItem modelItem, string variableName) 
    { 
     IEnumerable<ModelItem> scopedVariables = modelItem.GetScopedVariables(); 
     ModelItem variableModelItem = scopedVariables.FirstOrDefault(v => Equals(variableName, v.Properties["Name"].ComputedValue)); 
     if (variableModelItem == null) 
      throw new KeyNotFoundException(); 

     Variable<T> variable = variableModelItem.GetCurrentValue() as Variable<T>; 
     if (variable == null) 
      return default(T); 

     return GetImediateValueOrDefault(variable.Default, modelItem); 
    } 

得不到保障,請謹慎使用

+0

你看,當變量傳遞給InArgument運行我想獲取傳遞的變量的名稱。 – Arvand 2012-04-09 05:36:08

+0

@Arvand你不想在設計時看到它的價值,你確實希望它在運行時是否正確? 只是澄清一下,爲什麼你想在運行時的變量名? – 2012-04-09 16:48:53

+0

因爲變量是基於業務邏輯創建的,所以當打開設計器時,變量是在xaml文件中自動創建的,並且業務對變量有意義,所以在運行時我將的字典從我的自定義活動到其他方法。 – Arvand 2012-04-10 09:04:18