В этой статье будет рассмотрено начало работы с PopupContainerShowAction на примере демо-приложения Feature Center. Для PopupContainerShowActionObjects_DetailView будет создан контроллер, содержащий Action типа PopupContainerShowAction. Для созданного Action будет реализован обработчик события Execute. При выполнении PopupContainerShowAction в поле Log отображаемого объекта будет добавлятся запись, содержащая количество объектов, выбранных в popup-контейнере. Например: "The 'PopupContainerShowAction' is executed with 1 parameter(s). Data_1". Выполните следующие шаги.

using System.Linq;

using DevExpress.ExpressApp;

using DevExpress.ExpressApp.Actions;

using DevExpress.Persistent.Base;

using Xafari.Actions;

//...

  public partial class PopupContainerShowActionObjectsViewCotroller : ViewController<DetailView>

   {

      private PopupContainerShowActionObjects _currentObject;

      protected override void OnViewControlsCreated()

       {

          base.OnViewControlsCreated();

           _currentObject = (PopupContainerShowActionObjects)View.CurrentObject;

       }

 

      public PopupContainerShowActionObjectsViewCotroller()

       {

           TargetViewType = ViewType.DetailView;

           TargetObjectType = typeof(PopupContainerShowActionObjects);

 

          var popupContainerShowAction = new PopupContainerShowAction(this, "PopupContainerShowAction", PredefinedCategory.RecordEdit)

           {

               Category = PredefinedCategory.RecordEdit.ToString(),

               Caption = "PopupContainerShowAction",

               Id = "PopupContainerShowAction"

           };

 

           popupContainerShowAction.Execute += popupContainerShowAction_Execute;

           popupContainerShowAction.CustomizePopupWindowParams += popupContainerShowAction_CustomizePopupWindowParams;

         

       }

 

      private void LogTrace(string message)

       {

           _currentObject.Log = message + "\r\n" + _currentObject.Log;

       }

     

      void popupContainerShowAction_CustomizePopupWindowParams(object sender, CustomizePopupWindowParamsEventArgs e)

       {

          IObjectSpace objectSpace = Application.CreateObjectSpace();

           e.View = Application.CreateListView(objectSpace, typeof(BooleanProperties), true);

       }

 

      void popupContainerShowAction_Execute(object sender, PopupWindowShowActionExecuteEventArgs e)

       {

          string parameters = e.PopupWindow.View.SelectedObjects.Cast<BooleanProperties>().Aggregate("", (current, obj) => current + (obj.Name + " ; "));

           parameters = parameters.Trim().TrimEnd(';');

           LogTrace(string.Format("The 'PopupContainerShowAction' is executed with {0} parameter(s). {1}", e.PopupWindow.View.SelectedObjects.Count, string.IsNullOrEmpty(parameters) ? "" : "\r\n\t\t" + parameters));

       }

 

      protected override void OnActivated()

       {

          base.OnActivated();

           Frame.GetController<PopupContainerShowActionObjectsViewCotroller>().Active.SetItemValue("PopupContainerShowAction1", true);

       }

 

      protected override void OnDeactivated()

       {

           Frame.GetController<PopupContainerShowActionObjectsViewCotroller>().Active.RemoveItem("PopupContainerShowAction1");

          base.OnDeactivated();

       }

   }

Как вы можете видеть в вышеприведенном коде, Action типа PopupContainerShowAction создается в конструкторе. Метод popupContainerShowAction_CustomizePopupWindowParams(object sender, EventArgs e) и popupContainerShowAction_Execute(object sender, EventArgs e) реализуют обработку соответствующих событий. Добавление записей в свойство _currentObject.Log реализовано во вспомогательном методе LogTrace(string message).

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