Параметры это именованные величины, доступные при составлении выражения. Параметры создаются в прикладном коде и могут изменять свои значения в различные моменты функционирования приложения.

Параметры хранятся в коллекции ParametersDictionary. Для работы с параметрами редактор выражений предоставляет 2 события:

Ниже приведен код, демонстрирующий заполнение коллекции параметров в контроллере.

  public partial class ExpressionEditorParametersViewController : ViewController<DetailView>

   {

      public ExpressionEditorParametersViewController()

       {

           InitializeComponent();

           RegisterActions(components);

       }

 

      protected override void OnViewChanged()

       {

          base.OnViewChanged();

          if (this.View == null || this.View.ObjectTypeInfo.Type != typeof (ExpressionObject)) return;

          var propertyEditor = (IExpressionPropertyEditor)this.View.Items.FirstOrDefault(x => x.Id == "Expression");

          if (propertyEditor == null) return;

           propertyEditor.CollectParameters += propertyEditor_CollectParameters;

           propertyEditor.CollectParametersValues += PropertyEditorCollectParametersValues;

       }

 

      private void PropertyEditorCollectParametersValues(object sender, CollectParametersValuesEventArgs e)

       {

           e.ParametersDictionary["IntValue"] = 100;

           e.ParametersDictionary["FloatValue"] = (float)1.2;

           e.ParametersDictionary["StringValue"] = "str";

           e.ParametersDictionary["ObjectValue"] = this.ObjectSpace.GetObjects<DynamicParametersObject>().ToList().First();

       }

 

      private void propertyEditor_CollectParameters(object sender, CollectParametersEventArgs e)

       {

           e.ParametersDictionary.Add("IntValue", "IntValue");

           e.ParametersDictionary.Add("FloatValue", "FloatValue");

           e.ParametersDictionary.Add("StringValue", "StringValue");

           e.ParametersDictionary.Add("ObjectValue", "ObjectValue");

         

       }

 

      protected override void OnFrameAssigned()

       {

          base.OnFrameAssigned();

          this.Frame.ViewChanging += FrameViewChanging;

       }

 

      private void FrameViewChanging(object sender, ViewChangingEventArgs e)

       {

          if (this.View == null || this.View.ObjectTypeInfo.Type != typeof (ExpressionObject)) return;

          var propertyEditor = (IExpressionPropertyEditor)this.View.Items.FirstOrDefault(x => x.Id == "Expression");

          if (propertyEditor == null) return;

           propertyEditor.CollectParameters -= propertyEditor_CollectParameters;

           propertyEditor.CollectParametersValues -= PropertyEditorCollectParametersValues;

       }

   }

 

Использованный в этой статье код можно найти в файле ExpressionEditorParametersViewController.cs демо-приложения Feature Center, установленного вместе с Xafari.

Замечание:

Для вычисления значения выражения необходимо использовать метод GetValue статического класса ExpressionCalculator. Метод GetValue имеет необязательный параметр parameters:

В parameters следует передавать значения параметров.

Для вычисления значения выражения с использованием параметров.