Saya mencoba mempelajari WPF dan masalah MVVM, tetapi menemui hambatan. Pertanyaan ini mirip tetapi tidak persis sama dengan pertanyaan ini (menangani-dialog-in-wpf-with-mvvm) ...
Saya memiliki formulir "Login" yang ditulis menggunakan pola MVVM.
Formulir ini memiliki ViewModel yang menyimpan Username dan Password, yang terikat ke tampilan di XAML menggunakan data binding normal. Ia juga memiliki perintah "Login" yang terikat ke tombol "Login" pada formulir, agan menggunakan penyatuan data normal.
Saat perintah "Login" diaktifkan, ini memanggil fungsi di ViewModel yang berbunyi dan mengirim data melalui jaringan untuk masuk. Saat fungsi ini selesai, ada 2 tindakan:
Login tidak valid - kami hanya menampilkan MessageBox dan semuanya baik-baik saja
Login itu valid, kita perlu menutup formulir Login dan mengembalikannya benar sebagai
DialogResult
...
Masalahnya adalah, ViewModel tidak tahu apa-apa tentang tampilan aktual, jadi bagaimana cara menutup tampilan dan menyuruhnya mengembalikan DialogResult tertentu ?? Saya bisa menempelkan beberapa kode di CodeBehind, dan / atau meneruskan View ke ViewModel, tapi sepertinya itu akan mengalahkan keseluruhan poin MVVM sepenuhnya ...
Memperbarui
Pada akhirnya saya hanya melanggar "kemurnian" pola MVVM dan meminta View mempublikasikan Closed
acara, dan mengekspos Close
metode. ViewModel kemudian akan memanggil view.Close
. Tampilan ini hanya diketahui melalui antarmuka dan dihubungkan melalui wadah IOC, jadi tidak ada kemampuan pengujian atau pemeliharaan yang hilang.
Tampaknya agak konyol bahwa jawaban yang diterima adalah -5 suara! Sementara saya sangat menyadari perasaan baik yang didapat seseorang dengan memecahkan masalah sambil menjadi "murni", Tentunya saya bukan satu-satunya yang berpikir bahwa 200 baris kejadian, perintah dan perilaku hanya untuk menghindari metode satu baris dalam nama "pola" dan "kemurnian" agak konyol ....