private async Task EditSelected()
        {
            try
            {
                Trace.TraceInformation("Edit {0}: {1}", typeof(TModel).Name, EditViewModel.Id);
                var request = EditModel;
                await UpdateApi(request);

                Models.AddOrUpdate(request);
                IsEditFlyoutOpen = false;
            }
            catch (Exception e)
            {
                await _shell.HandleException(e, "Failed to Edit selected");
            }
        }
        protected virtual async Task Create()
        {
            var createdItemSubscription = Disposable.Empty;

            try
            {
                var id = await CreateApi(CreateModel);

                CreateViewModel.Id      = id;
                createdItemSubscription = HandleInteractionOnCreatedItemInList(id);
                Models.AddOrUpdate(CreateModel);

                Trace.TraceInformation("Created {0}: {1}", typeof(TModel).Name, CreateViewModel.Id);

                IsCreateFlyoutOpen = false;
            }
            catch (Exception e)
            {
                createdItemSubscription.Dispose();
                await _shell.HandleException(e, "Failed to Create");
            }
        }
        protected override async Task Create()
        {
            var createdItemSubscription = Disposable.Empty;

            try
            {
                var roles = ForceCreateUserRoles
                            .Where(x => x.IsSelected)
                            .Select(x => x.Role)
                            .ToList();

                var userProfile = await ForceCreateUserApi(roles);

                createdItemSubscription = HandleInteractionOnCreatedItemInList(userProfile.Id);

                var rolesIds = roles
                               .Select(x => x.Id.Value)
                               .ToList();
                var userPermissions =
                    from rp in _domain0.Model.RolePermissions.Items
                    where rolesIds.Contains(rp.RoleId)
                    join p in _domain0.Model.Permissions.Items on rp.Id equals p.Id.Value
                    select new UserPermission(p.ApplicationId, p.Description, p.Id, p.Name, rp.RoleId, userProfile.Id);
                _domain0.Model.UserPermissions.AddRange(userPermissions);
                Models.AddOrUpdate(userProfile);

                Trace.TraceInformation("Created {0}: {1} with roles [{2}]", typeof(UserProfile).Name, userProfile.Id, string.Join(", ", roles.Select(x => x.Name)));

                IsCreateFlyoutOpen = false;
            }
            catch (Exception e)
            {
                createdItemSubscription.Dispose();
                await _shell.HandleException(e, "Failed to create User");
            }
        }