Як зробити діалогове вікно 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