Как да си направим диалоговия стека преливане на Руски

Да предположим, че има прозорец, в който една маса показва списък, има определен набор от действия, например, нека има за всеки запис "Edit" / "Подробности" / "Delete".

Когато потребителят избира елементът "Изтриване", че е необходимо да се покаже прозорец с някакъв предупредителен текст, както и два възможни действия: "Ok" / "Отказ".

Колкото и да е направил в WinForms приложение:

Като част mvvm. трябва да се направи View. ModelView. т.е. трябва да имаме нещо подобно на Майн. MainViewModel. Dialog. DialogViewModel;

в Главна - ще бъде един бутон, който ще pribindiny до командите на ViewModel. т.е. като това може да изглежда като екипът на "Delete":

Друга възможност е да се направи обществено имущество в DialogViewModel с тип булев и да го настроите на диалог за натискане на всеки от бутоните (ОК / Cansel) за промяна на стойността, в най-добра форма, за да гледате на стойността на този имот. Това е просто бях измъчван от съмнения относно правилността на такъв подход.

Как да направите диалога в WPF използване mvvm?

Послепис код публикуван тук може да съдържа грешки

Въпросът е какво? Ако имате един прост диалогов финес - тя може да бъде на съвестта на \ на макара изцяло vyumodeli. Нарежете всяко време на всички клапи и vyumodeli и за тях, не го правят. От друга страна, ако тези диалози обикновено набират най-малко 5 броя, най-вероятно трябва да се има някъде в отделен клас да кажа само, че в vyumodeli нужда потвърждение с икона \ бутоните текст \. И тук е необходимо да се направи essno нормален модел на диалог и диалог демпфер. - Монк 28 яну '16 в 07:25

@Monk, че ще бъде толкова глупав, че да можете да напишете първата реализирана класа си диалогови прозорци (модел), изглед (View), логически (ViewModel), сега със сигурност е лесно и глупаво. докато не го осъзнават, за себе си и дори не знам как да се направи, вероятно ще трябва да спрете на обществено имущество в диалоговия прозорец и да го проверите от главния прозорец. - Плешив 28 яну '16 в 08:18

Има два варианта:

По-лесен начин, но по-неприятно, ако използвате TDD: Не е нужно да се създаде ViewModel и Виж отделно за диалоговия: само преди изтриване провери отговор на потребителя в диалогов прозорец, като:

Повече време отнема метод, но при спазване на всички канони на MVVM: създаване на ViewModel за вашия диалогов прозорец. В ViewModel създадете събитие, например:

Събитие, за да бъде украсена специален атрибут, който ще го излъчват в други ViewModel-класове, като се спазва принципът на високо сближаване свободно свързване. За да направите това, използвайте месинджър. Можете да опитате Appcelerate.EventBroker. В нашите проекти, използвам името му.

Следваща - създаване на команда, която се отнася до метод, който причинява гореспоменатия случай. Вържи команда към един бутон в диалоговия си.

В прозореца, като се използва метод, украсена атрибут от една и съща пратеникът лечение на това събитие. Методът ще включва код за изпълнение на заличаване.

Вижте в този случай, да създавате, като двойка Window.xaml + Window.cs, която има метода на ShowDialog (), който автоматично ще блокира обажда прозореца с времето за отваряне на диалоговия прозорец.

PS: първият метод не е съвсем правилно, защото е трудно да се провери резултата избран от потребителя в MessageBox.

Добавен Ако искате да използвате този прозорец на различни места в кандидатурата си, да създадете база абстрактен клас, и в наследството VM-класа претоварват необходимите ви качества. Така например, в някои случаи може да се наложи да "дръпне" на няколко събития до потвърждение реагираха малко ViewModel. Всичко зависи от сложността на проекта.

Отговорено 10 февруари '16 в 18:53