MVVM-Işığın
Temel Kullanım
- başlatılamadığı
- Her zaman tüm görüş modellerini içeren bir ViewModelLocator sınıf oluşturma BaseClass gelen ViewModels oluşturun App.cs dosyanın Application_Startup işlevinde DispatcherHelper Uygulamanız içinde bağlanır Kaynaklar
- Görüntünüze işlevler sunmak için RelayCommands kullanın
- DispatchHelper ne zaman kullanılmalıdır.
Temizlik-Up Fikirler:
- uygun, Temizleme'ye sizin DomainContext en EntitySet temizlemek için ViewModel eklemek()?
- ViewModelLocator'ın CleanupSomeVM() işlevini, uygulamada artık aktif olarak gerekmediklerinde, görünüm modlarını temizlemek için çağırın.
CleanUp işlevlerini ne zaman/nasıl kullandığınız hakkında başkalarından duymak isterim. Uygulamam büyüdükçe, istemci bellek kullanımını daha iyi yönetmek için bazı temizleme işlevleri ekleme ihtiyacım var. Blendability için
:
- bir Arayüzüne Özet Servisi/Sorgu Uygulamaları.
- Her Hizmet Uygulama sınıfı için 2 sınıf oluşturma (Tasarım 1, Üretim 1)
- Her bir ViewModel'inizde, gerektiğinde Sıkı Hizmet uygulamaları oluşturmak için kendi Hizmet Sınıfını kullanın (IsInDesignMode'u kullanın).
- DomainContext'inizi Service Implmentation Class içinde tutmak için Statik değişken kullanın.
- ViewModels yapıcıda DispatcherHelper.Initialize() öğesini ekleyin, ancak yalnızca Tasarım Modunda olduğunda. Blend, bir sayfa yüklenirken Uygulama'yı yüklemez ve bu, bu konuda çalışır. Katma İş Mantık için
:
- ViewModel sonra, ilk Modelde İş Mantık ekleyin.
- Uygun değişiklik/güncelleştirme olayları için mantık eklemek üzere Modelin kısmi yöntemlerini kullanın.
- Modelinize ait özet ve hesaplanmış değerler sağlamak için Salt Okunur özelliklerini (yalnızca alıcı) ekleyin.Görünümler İçin
:
- daima Locator Nesneye kök bağlayın.
- Yalnızca arka plan mantığını düzende veya özel UI mantığında tutmaya çalışın. ViewModel'inize başvurmaktan kaçının. Koleksiyon için
: En ViewModels içinde koleksiyonları için
- Kullanım CollectionViewSource, DomainContext en EntitySet
- kaynağı ile uygulayın tüm Filtreleme, Sıralama, ve ViewModel CollectionViewSource gruplandırma Mantık.
- ServiceCalls'dan sonra, Kullanıcı Arabirimini güncelleştirmek için CollectionViewSource nesnelerinizde .View.Refresh() öğesini çağırın. ViewModel koordinasyon (Kontrolör Mantık) için
- Kullanım Mesajları idareli çok fazla karmaşıklık yönetmek için zor olabilir.
- NotificationMessage ve PropertyChangedMessage sınıflarını kullanarak Gönder/Al ile birlikte kullanın. RIA DomainServices için
:
- inat değişiklikler fonksiyonunda herhangi günlüğü değil, güncelleme/insert Uygulamak/mantığını silin.
- Başka bir Varlığı Gezinme Özelliği aracılığıyla göndermeniz gerekiyorsa Ekle, Güncelle, Sil işlevleri sırasında, önce EntityStatus'u kontrol edin veya EntityStatus çakışmalarını önlemek için öğeyi başka bir Bağlamdan yükleyin. Hata ayıklama/Test için
:
- Kontrol Çıkışı Cilt Hataları Pencere ve bunları düzelt. Bağlama Hataları kullanıcıya sessizce başarısız olur, ancak uygulama performansını ve beklenen davranışı bozar.
- 1- tutun:
- sunucu tarafı mantığını ve işlevleri İdare Framework için
test etmek Birim Test proje oluşturun
- herhangi eklendi Modeli/İş Logic doğrulamak için Silverlight Birim Testleri oluşturun -1 Eşitliklerin EşleşmesiSonraki Etki Alanı Hizmeti. Başka bir şekilde bölünmeye çalışmak sorunlara neden oluyor.
- Ekleme, Güncelleme ve Silme mantığınızı dikkatli bir şekilde oluşturmak için çok fazla zaman harcamak istemediğiniz sürece [Bileşim] özelliğini kullanmayın.
- RIA İstemcisine özel türler sunmak için ayrı bir hizmet kullanın. EntityFramework Nesnesi için DomainService'nize eklemeyin. Ekle, Güncelle, Sil işlevlerinde değil, PersistChangeSet işlevinde Sunucu tarafı güncelleştirme/bütünleştirme mantığı (diğer sistemlerin güncellenmesi gibi) gerçekleştirin.Bu, yanlışlıkla sürümünüzün güncellenmemesini sağlayan Gezinme Özellikleri aracılığıyla bir varlığın yanlışlıkla çekilmesini engeller.
- Güncelleştirme/tümleştirme mantığı sırasında geçerli değerleri bulmak için ek bir Bağlam oluşturun.
Bunu herkesin düzenleyebileceği bir topluluk vikisine dönüştürmeyi düşünün. –
Ben bunu bir com-wiki olarak düşünmüyorum. Asker bu iyi soru için itibar hak ediyor. – Shimmy