public UserManagerViewmodel(IAuthenticationService authenticationService)
 {
     _authenticationService = authenticationService;
     Groups = new ObservableCollection <GroupViewmodel>(authenticationService.Groups.Select(g =>
     {
         var newVm = new GroupViewmodel(g);
         newVm.Load();
         return(newVm);
     }));
     Users = new ObservableCollection <UserViewmodel>(authenticationService.Users.Select(u =>
     {
         var newVm = new UserViewmodel(u, this);
         newVm.Load();
         return(newVm);
     }));
     CommandAddUser = new UICommand {
         ExecuteDelegate = AddUser
     };
     CommandDeleteUser = new UICommand {
         ExecuteDelegate = DeleteUser, CanExecuteDelegate = CanDeleteUser
     };
     CommandAddGroup = new UICommand {
         ExecuteDelegate = AddGroup
     };
     CommandDeleteGroup = new UICommand {
         ExecuteDelegate = DeleteGroup, CanExecuteDelegate = CanDeleteGroup
     };
     authenticationService.UsersOperation  += AuthenticationService_UsersOperation;
     authenticationService.GroupsOperation += AuthenticationService_GroupsOperation;
 }
        private void AddUser(object obj)
        {
            var newUserVm = new UserViewmodel(_authenticationService.CreateUser(), this);

            Users.Add(newUserVm);
            SelectedUser = newUserVm;
        }
 private void AuthenticationService_UsersOperation(object sender, CollectionOperationEventArgs <IUser> e)
 {
     Application.Current.Dispatcher.BeginInvoke((Action) delegate
     {
         var vm = Users.FirstOrDefault(u => u.Model == e.Item);
         if (e.Operation == CollectionOperation.Add)
         {
             if (vm == null)
             {
                 vm = new UserViewmodel(e.Item, this);
                 vm.Load();
                 Users.Add(vm);
             }
         }
         else
         {
             if (vm != null)
             {
                 Users.Remove(vm);
                 vm.Dispose();
             }
         }
     });
 }