public UsersListViewExtended()
 {
     InitializeComponent();
     btEdit.IsEnabled           = btChangePass.IsEnabled = false;
     listView.SelectionChanged += (ctrl) => btChangePass.IsEnabled = btEdit.IsEnabled = listView.SelectedUsersIds.Any();
     btChangePass.Click        += (o, e) => {
         var userId = listView.SelectedUsersIds.First();
         var user   = _repository.Users.First(x => x.Id.Equals(userId));
         EditUserPasswordView.Show(() =>
         {
             _repository.Save(user);
             _server.RevokeToken(user.Login);
         },
                                   (args) =>
         {
             if (args.Password.Length < 6)
             {
                 args.Message = "Длина пароля должна быть не менее 6 символов";
                 args.Success = false;
             }
             else
             {
                 args.Success = true;
             }
         },
                                   user);
     };
     btEdit.Click += (o, e) => {
         var userId    = listView.SelectedUsersIds.First();
         var user      = _repository.Users.First(x => x.Id.Equals(userId));
         var prevLogin = user.Login;
         EditUserView.Show(
             () =>
         {
             _repository.Save(user);
             _server.RevokeToken(prevLogin);
             listView.Refresh(user);
         },
             (args) =>
         {
             if (_repository.Users.Any(x => x.Login.Equals(args.Login) && !x.Id.Equals(user.Id)))
             {
                 args.Message = "Пользователь с таким логином уже существует";
                 args.Success = false;
             }
             else if (_repository.Users.Any(x => x.Name.Equals(args.Name) && !x.Id.Equals(user.Id)))
             {
                 args.Message = "Пользователь с таким именем уже существует";
                 args.Success = false;
             }
             else
             {
                 args.Success = true;
             }
         },
             user);
     };
 }
        public static void Show(Action callback, Action <UserParamsValidationArgs> validation, UserBase user)
        {
            var control = new EditUserView(user);
            var dialog  = new DialogView(control);

            control.Validation = validation;
            control.OkClicked += () =>
            {
                callback?.Invoke();
                dialog.Close();
            };
            dialog.Show();
        }
        public UsersListView()
        {
            InitializeComponent();

            Refresh();

            itemsView.SelectionChanged += (o, e) => SelectionChanged?.Invoke(this);

            btAdd.Click += (o, e) => {
                var user = new User();
                EditUserView.Show(
                    () => {
                    EditUserPasswordView.Show(() =>
                    {
                        _repository.Add(user);
                        AddInternal(user);
                    },
                                              (args) =>
                    {
                        if (args.Password.Length < 6)
                        {
                            args.Message = "Длина пароля должна быть не менее 6 символов";
                            args.Success = false;
                        }
                        else
                        {
                            args.Success = true;
                        }
                    },
                                              user);
                },
                    (args) =>
                {
                    if (_repository.Users.Any(x => x.Login.Equals(args.Login)))
                    {
                        args.Message = "Пользователь с таким логином уже существует";
                        args.Success = false;
                    }
                    else if (_repository.Users.Any(x => x.Name.Equals(args.Name)))
                    {
                        args.Message = "Пользователь с таким именем уже существует";
                        args.Success = false;
                    }
                    else
                    {
                        args.Success = true;
                    }
                },
                    user);
            };

            btRemove.Click += (o, e) => {
                MessageView.ShowYesNo("Вы уверены что хотите удалить выбранных пользователей?", "Удаление пользователей", Icons.Icon.UserDelete,
                                      (result) => {
                    if (result)
                    {
                        var selectedUsers = SelectedUsersIds;
                        foreach (var user in selectedUsers)
                        {
                            Remove(_repository.Users.First(x => x.Id.Equals(user)));
                        }
                    }
                });
            };

            SelectionChanged += (ctrl) => btRemove.IsEnabled = SelectedUsersIds.Any();
        }