WPF

Caliburn.Micro'da Convention: View ile ViewModel nasıl eşleşiyor?

Bir serinin üçüncü yazısı, Caliburn.Micro'nun Convention (uzlaşma/kural) yaklaşımını ele alıyor: View ile ViewModel'in isim kuralları ve reflection üzerinden otomatik eşleştirilmesi. ViewLocator'ın çalışma adımları, NameTransformer'ın varsayılan beş regex kuralı ve AssemblySource'un neden önemli olduğu anlatılıyor.

Yayın tarihi
Okuma süresi
5 dk okuma
agent çalıştırması #19
agent çalıştırması #19
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • ViewLocator, ViewModel örneği ya da tipi alıp ilgili View'ı döndüren `LocateForModel` ve `LocateForModelType` Func'larını sunar.
  • Eşleştirme iki adımda ilerler: tip çıkarımı ve `Activator.CreateInstance` ile reflection tabanlı oluşturma.
  • `IViewAware` uygulayan ViewModel, View'ı önbelleğe alabilir; ViewLocator önce önbelleğe bakar.
  • NameTransformer varsayılan olarak beş kural getirir ve `ViewModels` → `Views` klasör ayrımını da kapsar.
  • AssemblySource tarama alanını belirler; plugin gibi ayrı assembly'lerdeki View'lar `SelectAssemblies` ile eklenmeli.
  • Otomatik eşleştirmeyi tamamen atlayıp View ve ViewModel'i elle oluşturup `ViewModelBinder.Bind` ile bağlamak mümkün.

MVVM'de ViewModel'e önerilen yaklaşım ViewModel-First: önce ViewModel tasarlanır, View bir DataTemplate ile üretilir ya da çalışma anında bulunur. Caliburn.Micro bu işi ViewLocator ile yapar; `LocateForModel` ve `LocateForModelType` gibi Func tabanlı override'lar verilen ViewModel örneği veya tipi için ilgili View'ı döndürür. İşlem iki adımdır: önce ViewModel tipinden View tipi çıkarılır, sonra View `Activator.CreateInstance` ile reflection üzerinden oluşturulur. ViewModel `IViewAware` uyguluyorsa ve daha önce bir View önbelleğe alınmışsa yeni nesne üretilmez, mevcut View döndürülür.

Tip çıkarımı NameTransformer'ın regex kurallarıyla yapılır: `ReplacePattern` ve `ReplaceValue` ile örneğin son ekteki ViewModel, View ile değiştirilir; sonuçta `ShellViewModel` → `ShellView` olur. Gelen beş varsayılan kural, ViewModels → Views klasör düzenini de kapsar. Çıkan değer bir string olduğundan ikinci aşamada AssemblySource'taki assembly'lerde aranır; AppDomain taranmadığı için plugin gibi ayrı assembly'lerdeki View'ları `SelectAssemblies` override'ı ya da AssemblySource'un Add/AddRange metotlarıyla kapsama almak gerekir.

Gerçek dünyada kullanımı

  • MVVM tabanlı bir WPF masaüstü uygulamasında ViewModels ve Views klasörlerini ayırıp View'ları elle new'lemeden çözmek isteyen ekipler.
  • DirectoryCatalog ile plugin yükleyen ve plugin içindeki View'ların da otomatik bulunmasını isteyen bir uygulama.
  • Caliburn.Micro'dan başka bir MVVM framework'üne geçişte mevcut isimlendirme kurallarının nasıl çalıştığını anlamak isteyen geliştiriciler.

Neden önemli

Caliburn.Micro'nun otomatik eşleştirmesi ancak isimlendirme ve assembly kapsamı doğruysa çalışır; yanlış isim ya da eksik AssemblySource kaydı, çalışma anında View bulunamadı hatası olarak karşınıza çıkar.

Bu özet, DEV Community: #dotnet üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü