Laden...

Wie kann ich Daten mit einem Event in der Applikation weitergeben?

Erstellt von behindyoû vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.215 Views
B
behindyoû Themenstarter:in
20 Beiträge seit 2020
vor 3 Jahren
Wie kann ich Daten mit einem Event in der Applikation weitergeben?

Guten Mittag, liebe Herren und Damen 😃

In meiner Anwendung habe ich ein kleines Login eingebaut (Account), jedes Account hat/kann mehrere User haben.
Nun wollte ich, sobald sich der Account eingeloggt hat, seine ID im Event weitergeben um Sie weiter nutzen zu können.

AccountRepository


        public Account CheckAccount(string email, string password)
        {
            Account result = _account.Where(k => k.Email == email && k.Password == password).FirstOrDefault();

            EventSystem.Instance.eventHanlder.GetEvent<AccountDataEvent>().Publish(result.AccountID);
            return result;
            
        }

Nun wollte ich (Ich habe es sowohl im UserRepository als auch im SelectUserViewModel probiert, ledeglich ohne erfolg) die ID weiter bearbeiten bzw nutzen.

        public SelectUserViewModel()
        {
            _repository = new UserRepository();
            SelectedUserCommand = new DelegateCommand(UserSelected);

            EventSystem.Instance.eventHanlder.GetEvent<AccountDataEvent>().Subscribe(accountData);

            Users = _repository.GetUser(AccountID);

        }

        private void accountData(int _accountid)
        {
            AccountID = _accountid;
        }
        private int accountID;
        public int AccountID
        {
            get { return accountID; }
            set { SetProperty(ref accountID, value); }
        }

meine _accountID erhält wie gewünscht den Wert der ID { 1 }
mein AccountID jedoch bleibt weiterhin auf 0.

Nutze ich das Event womöglich falsch?

Ich habe mich mal auf PrismLibary etwas (versucht) schlau gemacht, blicke jedoch die Art wie Prism das nutzt nicht wirklich durch und fand auch keinen Example welches ich gut nachvollziehen konnte.

B
behindyoû Themenstarter:in
20 Beiträge seit 2020
vor 3 Jahren

Ich habe mein Code nun leicht verändert, komme jedoch trotzdem nicht an mein gewünschtes Ziel. Jemand vielleicht echt ein Rat für mich? So langsam komm ich ans verzeifeln
LoginViewModel


        public LoginViewModel(IEventAggregator _eventAggregator, IRegionManager _manager, AccountRepository _repository)
        {

            manager = _manager;
            eventAggregator = _eventAggregator;
            repository = _repository;

            LoginCommand = new DelegateCommand(ExecuteLogin);
            
        }

        private void ExecuteLogin()
        {
            Account result = repository.AccountAuth(Email, Password);
            if (result != null)
            {
                manager.RequestNavigate("ShellRegion", "SelectUser");
                eventAggregator.GetEvent<AccountLoginEvent>().Publish(true);
                eventAggregator.GetEvent<AccountIDEvent>().Publish(result);
                Email = string.Empty;
                Password = string.Empty;
                Count = 0;
                Msg = "";
            }
            else
            {
                Count += 1;
                Msg = "Account konnte nicht gefunden werden." + " Versuch: " + Count;
                eventAggregator.GetEvent<AccountLoginEvent>().Publish(false);

            }
        }

SelectUserViewModel

       
        public SelectUserViewModel(IEventAggregator _eventAggregator, IRegionManager 
         _regionManager, UserRepository _userRepository)
        {
            eventAggregator = _eventAggregator;
            regionManager = _regionManager;
            userRepository = _userRepository;
            eventAggregator.GetEvent<AccountIDEvent>().Subscribe(accountData);
            Test = "Hallo from Select User";
        }

private void accountData(Account account)
        {
            if (account != null)
            {
                AllUser = userRepository.GetAllUser(account);
                //regionManager.RequestNavigate("ShellRegion", "Main");
                //eventAggregator.GetEvent<AccountLoginEvent>().Publish(true);

            }
            else
            {
            }
        }

UserRepository

        public List<User> GetAllUser(Account account)
        {
            var result = from s in testUsers
                         where s.AccountID ==  account
                         select s;
            return result.ToList();
        }
B
behindyoû Themenstarter:in
20 Beiträge seit 2020
vor 3 Jahren
PubSubEvent: Property übenrimmt kein Wert aus dem Subscribe

Ok, erledigt. verzeihung. :c

1.029 Beiträge seit 2010
vor 3 Jahren

Hi,

falls du hier noch mal rein schaust:

Was immer du da mit dem Passwort treibst - hör bitte auf damit und nimm ein ordentliches System oder Vorbild für Authentifizierung.

Wer ein Passwort im Klartext im Jahr 2020 speichert dem gehört eigentlich die Schulbank.

Es gibt genug fertige Systeme - und selbst wenn du nicht gewillt bist ein fertiges zu nehmen - dann solltest du dir zumindest die Zeit nehmen nachzuforschen wie man das richtig macht.

LG

16.834 Beiträge seit 2008
vor 3 Jahren

Wer ein Passwort im Klartext im Jahr 2020 speichert dem gehört eigentlich die Schulbank.

.. davon abgesehen ist ein solches Vorgehen mittlerweile sogar gesetzlich verboten.
Ja, mit sowas muss sich ein Entwickler auch beschäftigen.

Ok, erledigt. verzeihung. :c

Ein Forum funktioniert so, dass man am Ende die Lösung postet - auch wenn man sie selbst gefunden hat 😉
[Hinweis] Wie poste ich richtig?

B
behindyoû Themenstarter:in
20 Beiträge seit 2020
vor 3 Jahren

Taipi88:
Ich bin mir dessen bewusst, dass Passwörter nicht im Klartext abgespeichert werden.
Da es hier jedoch vorrangig nur um die Übermittlung der Daten geht, spielt meiner Ansicht nach, wie die Daten konstruiert sind, wenig zur Sache.
Im Endprojekt werden sämtliche Daten, welche es erfordern, verschlüsselt in die DB übertragen.

Abt: Ja, Verzeih mir. Ich hatte noch vor, den zweiten Beitrag zu bearbeiten und die Lösung darin zu Posten, kam bisher nur nicht mehr dazu. Ich werde es gleich nachholen. 😃