2012-04-08 5 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, и бизнес имеет смысл в отношении переменных, поэтому во время выполнения я передаю словарь from моя обычная деятельность для других методов. – Arvand

Смежные вопросы