2012-04-08 20 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

+0

@Arvandあなたは設計時に価値を失うことはありません。実行時にそれを望みますか?それは間違いありませんか? 説明のために、なぜ実行時に変数名を使用したいのですか? –

+0

変数はビジネスロジックに基づいて作成されるため、デザイナを開くときに変数が自動的にxamlファイルに作成され、ビジネスは変数についての感覚を持っているため、実行時に他の方法への私のカスタム活動。 – Arvand

関連する問題