Як зробити діалогове вікно stack overflow російською

Припустимо є вікно в якому у вигляді таблиці відображається якийсь список, для кожного запису є якийсь набір дій, для прикладу нехай будуть "Edit" / "Detail" / "Delete".

При виборі користувачем пункту "Delete" необхідно показати вікно з якимось попереджає текстом, і двома можливими діями: "Ok" / "Cancel".

Як би я це зробив в winforms додатку:

В рамках mvvm. необхідно зробити View. ModelView. тобто у нас повинно бути що то типу Main. MainViewModel. Dialog. DialogViewModel;

в Main - будуть кнопки які будуть прібіндіни до командам з ViewModel. тобто наприклад так могла б виглядати команда для "Delete":

Як варіант можна зробити публічне властивість в DialogViewModel з типом boolean і встановлювати його в діалозі, після натиснення на будь-яку з кнопок (Ok / Canсel) міняти його значення, в головній формі дивитися значення цієї властивості. Ось тільки мене терзають сумніви в правильності такого підходу.

Як зробити Діалогове вікно в wpf з використанням mvvm?

P.S. код писав тут, можуть бути помилки

Питання то в чому? Якщо у вас простий діалог уточнення - то це може бути на совісті в'юшки \ вьюмоделі цілком. Пиляти кожен раз на кожен чих в'юшки і вьюмоделі до них теж не треба. З іншого боку, якщо таких діалогів в цілому набирається хоча б штук 5, то напевно варто винести кудись в окремий клас можливість просто під вьюмоделі сказати що потрібен запит підтвердження з таким то текстом \ іконкою \ кнопками. І тут вже Ессен треба робити нормальну модель діалогу і в'юшку діалогу. - Monk 28 Січня '16 о 7:25

@Monk що б так тупо написати Ви спочатку реалізували свій клас Dialogs (Model), подання (View), логіку (ViewModel), тепер це звичайно легко і тупо. а я поки не реалізував це для себе і навіть не знаю як зробити, напевно доведеться зупинятися на публічному властивості в діалозі і перевіряти його з головного вікна. - Bald 28 Січня '16 о 8:18

Тут є два варіанти дій:

Ще простіше, але більш незручний в разі, якщо ви використовуєте TDD: Вам немає необхідності створювати ViewModel і View окремо для діалогового вікна: досить перед видаленням перевіряти відповідь користувача в діалоговому вікні наступним чином:

Більш трудомісткий спосіб, але з дотриманням усіх канонів MVVM: створюєте ViewModel для вашого діалогового вікна. У ViewModel створюєте подія, наприклад:

Подія потрібно декорувати спеціальним атрибутів, який дозволить транслювати його в інші ViewModel-класи, не порушуючи при цьому принцип high-cohesion loose-coupling. Для цього використовуються месенджери. Можете спробувати Appcelerate.EventBroker. У своїх проектах я використовую саме його.

Далі - створюєте команду, яка посилається на метод, що викликає вищезгадана подія. Прив'язуєте команду до кнопки в вашому діалоговому вікні.

У самому вікні за допомогою методу, декорованого аттрібутом з того ж месенджера обробляєте цю подію. Метод буде містити код, який виконує видалення.

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

PS: перший спосіб не зовсім правильний, тому що буде складно тестувати результат, вибраний користувачем в MessageBox.

Додано Якщо захочете використовувати це вікно в різних місцях вашого застосування, створіть базовий абстрактний клас, а в успадкованих VM-класах увійдіть або потрібні вам властивості. Наприклад, в деяких випадках вам може знадобитися «смикнути» кілька подій, щоб на підтвердження зреагувало кілька ViewModel. Тут все залежить від складності проекту.

відповідь дан 10 Лютого '16 о 18:53

Схожі статті