public virtual async void OpenItemEditor(TItem item)
        {
            EditingItem = item;
            if (FormProvider == null)
            {
                return;
            }
            UsedForm = FormProvider.GetUIElement();
            Cache.Set(EdiTItemCacheKey, EditingItem.DeepClone()); // cache item state so it can be restored later
            bool result = false;

            try
            {
                result = (bool)await DialogService.Show(UsedForm,
                                                        (sender, args) => {
                    OnItemEditorOpening(sender, new ItemEditorOpeningDialogEventArgs <TItem>(item));
                    if (args.ShouldClose)
                    {
                        args.Close();
                    }
                },
                                                        (sender, args) => {
                    ItemEditorClosingDialogEventArgs <TItem> extArgs = new ItemEditorClosingDialogEventArgs <TItem>(args.Result, item);
                    OnFormClosing(extArgs);
                    if (extArgs.IsCancelled)
                    {
                        args.Cancel();
                    }
                }).ConfigureAwait(true);
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Couldn't open form");
                OnOpenFormFailed(item);
                return;
            }
            OnItemEdited(new ItemEditedEventArgs <TItem>(result, (TItem)Cache.Get(EdiTItemCacheKey), item));
            Cache.Remove(EdiTItemCacheKey);
        }
 protected override int SaveImpl()
 {
     EditingItem.EncryptPassword();
     EntityManagerService.DefaultUserManager.ValidateAndSave(EditingItem);
     return(EditingItem.ID);
 }
 public override void Init(User entity)
 {
     base.Init(entity);
     EditingItem.DecryptPassword();
 }