SORU
21 Ocak 2010, PERŞEMBE


Yeni bir pencere oluşturmak için en iyi yaklaşım MVVM kullanarak WPF

Komşu post: http://stackoverflow.com/questions/501886/wpf-mvvm-newbie-how-should-the-viewmodel-close-the-form/2100824#2100824 MVVM kullanımı ile pencereleri kapatmak için nasıl bir vizyon ilan ettik. Onları açmak için nasıl. ve şimdi bir sorum var:

Ana pencere (ana görünüm) var. ""Düğmesine "Demo" pencere (kalıcı iletişim kutusu) görüntülenir. programdaki kullanıcı tıklattığında Ve windows MVVM desen kullanarak açmak için uygun bir yolu nedir? İki genel yaklaşım görüyorum

1 kişi (muhtemelen en basit). Olay işleyicisi "ShowButton_Click" bu gibi: ana pencerenin arkasında Kanunu uygulanmalıdır

        private void ModifyButton_Click(object sender, RoutedEventArgs e)
        {
            ShowWindow wnd = new ShowWindow(anyKindOfData);
            bool? res = wnd.ShowDialog();
            if (res != null && res.Value)
            {
                //  ... store changes if neecssary
            }
        }
  1. Eğer biz "düğme durumu (etkin/devre dışı) düğmesi devleti yönetecek mantığı eklemek gerekir değiştirilmelidir;." Göster
  2. Kod çok benzer kaynak "eski tarz" Win ve MFC kaynakları - ben emin değilim eğer bu iyi ya da kötü, tavsiye lütfen.
  3. Kaçırdığım başka bir şey mi?

Başka bir yaklaşım:

Bu MainWindowViewModel "" komutu. ICommand arayüzü dönecektir özelliği ShowCommand uygulayacağız Sırayla ortak:

  • arttıracak ""; . ShowDialogEvent
  • düğme devlet yönetecek.

Bu yaklaşım daha uygun için MVVM ama gerektirir ek kodlama: ViewModel sınıfı "penceresi göster" MainWindowViewModel sadece zam "ShowDialogEvent", MainWindowView edeceğiz ihtiyacımız ekleyin olay işleyicisi onun MainWindow_Loaded yöntemi gibi bir şey bu

((MainWindowViewModel)DataContext).ShowDialogEvent  = ShowDialog;

(ShowDialog - benzer 'ModifyButton_Click' yöntem.)

Benim sorular şöyle: 1. Başka bir yaklaşım görüyor musunuz? 2. Bu nedenlerden biri iyi ya da kötü olduğunu düşünüyor musunuz? (neden?)

Başka düşünceleri bekliyoruz.

Teşekkürler.

CEVAP
18 ŞUBAT 2010, PERŞEMBE


Bu konu hakkında son zamanlarda çok düşündüm. Burada eğer bir 'konteyner' ya da her neyse bağımlılık enjeksiyon için. olarak projenizde Unity kullanırsanız vardı bir fikir App.OnStartup() geçersiz kılar ve model, view model oluşturmak ve görüntülemek ve her bir uygun başvuru verirsin normalde sanırım. Birlik kullanarak, kap modeli için bir referans ver, '' görünüm. gidermek için kap kullanın Birlik konteyner görüntüle model enjekte, asla doğrudan başlatılamadı. Görünümü çözüldükten sonra, Show() Ara.

Bir örnek izledim videoda, Birlik kabı OnStartup yerel bir değişken olarak oluşturulmuştur. Eğer Uygulama sınıfında public static salt okunur bir özellik olarak oluşturduğunuz ne? Sonra yeni bir windows, yeni bir görünüm ihtiyacı varsa, otomatik olarak enjekte oluşturmak için ana görünüm modeli kullanabilirsin. App.Container.Resolve<MyChildView>().ShowDialog(); gibi bir şey.

Bir şekilde testlerinizi Birlik konteyner için arama sonucu dalga geçebilirsin. Alternatif olarak, belki de yukarıda anlattığım temelde ne yapıyor hangi Uygulama sınıfı ShowMyChildView() gibi yöntemler yazabilirsiniz. Sadece ** 10, eh geri dönüş beri App.ShowMyChildView() bir ara dalga geçmek kolay olabilir?

Peki, gerçekten sadece new MyChildView() ama, sahip olduğum küçük bir fikir kullanarak daha iyi olabilir. Paylaşmak istedim. =)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNNMoney

    CNNMoney

    16 Kasım 2006
  • GavinMichaelBooth

    GavinMichael

    26 AĞUSTOS 2006
  • RickardRick

    RickardRick

    9 Mart 2007