WPF ve MVVM problemini öğrenmeye çalışıyorum, ama bir engelle karşılaştım. Bu soru benzer ancak bu soru ile tamamen aynı değil (wpf-in-mvvm ile iletişim-diyalogları) ...
MVVM deseni kullanılarak yazılmış bir "Giriş" formu var.
Bu formda, normal veri bağlamaları kullanılarak XAML'deki görünüme bağlı olan Kullanıcı Adını ve Parolayı içeren bir ViewModel bulunur. Ayrıca, normal veritabanını kullanarak, formdaki "Oturum Aç" düğmesine bağlı bir "Oturum Aç" komutuna sahiptir.
"Oturum Aç" komutu tetiklendiğinde, ViewModel'de kapanıp oturum açmak için ağ üzerinden veri gönderen bir işlevi çağırır. Bu işlev tamamlandığında 2 eylem vardır:
Giriş geçersizdi - sadece bir MessageBox gösteriyoruz ve her şey yolunda
Giriş geçerliydi, Giriş formunu kapatmamız ve doğru olarak geri dönmesi gerekiyor
DialogResult
...
Sorun, ViewModel gerçek görünüm hakkında hiçbir şey bilmiyor, bu yüzden nasıl görünümü kapatabilir ve belirli bir DialogResult dönmek için söyleyebilirim? Ben CodeBehind bazı kod sopa ve / veya ViewModel görünümden geçmek, ama bu tamamen MVVM bütün noktasını yenecek gibi görünüyor ...
Güncelleme
Sonunda MVVM modelinin "saflığını" ihlal ettim ve View'e bir Closed
olay yayınlamasını ve bir Close
yöntemi ortaya koymasını sağladım . ViewModel daha sonra arayacaktır view.Close
. Görünüm yalnızca bir arabirim aracılığıyla bilinir ve bir IOC kapsayıcısı aracılığıyla kablolanır, bu nedenle test edilebilirlik veya bakım kolaylığı kaybolmaz.
Kabul edilen cevabın -5 oy olduğu çok aptalca görünüyor! Birinin "saf" olurken bir sorunu çözerek elde ettiği iyi duyguların farkında olduğum halde, şüphesiz ki 200 satır olay, komut ve davranışın sadece bir satır yönteminden kaçınmasını düşünen tek kişi ben değilim "desen" ve "saflık" adı biraz saçma ....
Close
demek istediğini anlıyorum, ama şahsen genel durum için bile basit bir yöntemin hala en iyi çözüm olduğunu düşünüyorum. Diğer daha karmaşık diyaloglardaki diğer her şey MVVM ve databound'dur, ancak burada basit bir yöntem yerine devasa "çözümleri" uygulamak aptalca görünüyordu ...