Cum de a face un dialog stivă de preaplin în limba rusă

Să presupunem că există o fereastră în care un tabel afișează o listă, există un anumit set de acțiuni, de exemplu, să nu fie pentru fiecare înregistrare „Edit“ / „Detaliu“ / „Delete“.

Când utilizatorul selectează „Delete“ element este necesar pentru a afișa o fereastră cu un text de avertizare, și două acțiuni posibile: „OK“ / „Anulare“.

La fel de mult cum am făcut-o în aplicare WinForms:

Ca parte mvvm. trebuie să fie făcut View. ModelView. și anume ar trebui să avem ceva de genul principal. MainViewModel. Dialog. DialogViewModel;

Main - va fi un buton care va pribindiny la comenzile de ViewModel. și anume ca aceasta s-ar putea arata ca echipa de „Delete“:

Alternativ, puteți face o proprietate publică în DialogViewModel cu tipul boolean și puneți-l într-un dialog cu privire la apăsarea oricare dintre butoanele (OK / Cansel) pentru a schimba valoarea sa, intr-o forma de top pentru a viziona valoarea acestei proprietăți. Asta e doar am fost afectat de îndoieli cu privire la corectitudinea unei astfel de abordări.

Cum de a face dialogul în WPF folosind mvvm?

P.S. Codul postate aici pot conține erori

Întrebarea este ce? Dacă aveți un rafinament de dialog simplu - poate fi pe conștiința tambur \ vyumodeli în întregime. Se taie de fiecare dată pe amortizoarelor toți și vyumodeli pentru ei, nu. Pe de altă parte, în cazul în care astfel de dialoguri, în general, recrutați cel puțin 5 bucăți, probabil că ar trebui să poarte undeva într-o clasă separată doar pentru a spune că, în confirmarea nevoie vyumodeli cu ajutorul butoanelor de text \ pictograma \. Și aici este necesar să se facă essno modelul normal al dialogului și amortizor de dialog. - Monk 28 ianuarie '16 la 07:25

@Monk care ar fi atât de prost să-ți scrie realizat prima Dialoguri clasa lui (model), vizualizare (vizualizare), logica (ViewModel), acum este cu siguranță ușor și prost. în timp ce eu nu am realizat pentru ei înșiși și nici măcar nu știu cum să facă, probabil, va trebui să se oprească la o proprietate publică în fereastra de dialog și verificați-l din fereastra principală. - Bald 28 ianuarie '16 la 08:18

Există două opțiuni:

Un mod mai ușor, dar mai inconfortabil dacă utilizați un TDD: Nu aveți nevoie pentru a crea un ViewModel și Vezi separat pentru dialog: chiar înainte de a șterge verifica răspunsul utilizatorului în următoarea fereastră de dialog ca:

Mai multe metode consumatoare de timp, dar în conformitate cu toate canoanele MVVM: a crea un ViewModel pentru caseta de dialog. În ViewModel a crea un eveniment, de exemplu:

Eveniment pentru a fi decorat un atribut special, care se va difuza la alte ViewModel-clase, respectând în același timp principiul de mare coeziune în vrac de cuplare. Pentru a face acest lucru, utilizați instant messenger. Puteți încerca Appcelerate.EventBroker. În proiectele noastre, eu folosesc numele lui.

Next - creați o comandă care se referă la metoda care cauzează evenimentul menționat mai sus. Legați o comandă de la un buton în dialogul tău.

În fereastra folosind un atribut metodă decorat de același mesager trata acest eveniment. Metoda va cuprinde codul pentru efectuarea ștergerii.

Vezi, în acest caz, de a crea, ca un cuplu Window.xaml + Window.cs, care are metoda ShowDialog (), care va bloca în mod automat fereastra de asteptare la timpul de deschidere a dialogului.

PS: prima metodă nu este în întregime corectă, deoarece este dificil de a testa rezultatul selectat de către utilizator în messageBox.

Adăugat Dacă doriți să utilizați această fereastră pentru diferite locații în aplicația dvs., creați o clasă abstractă de bază, și în moștenirea VM-clase supraîncărcați proprietățile necesare tine. De exemplu, în unele cazuri, poate fi necesar să „trage“ câteva evenimente de confirmare a reacționat oarecum ViewModel. Totul depinde de complexitatea proiectului.

Răspuns 10 '16 februarie, la 18:53