Başta bu ve bu olmak üzere bazı MVVM makalelerinden geçiyorum .
Benim özel sorum şudur: Model değişikliklerini Modelden ViewModel'e nasıl iletebilirim?
Josh'un makalesinde, bunu yaptığını görmüyorum. ViewModel her zaman Modelden özellikler ister. Rachel'ın örneğinde, model uygulamasına sahip ve modeldeki INotifyPropertyChanged
olayları yükseltiyor, ancak bunlar görünümün kendisi tarafından tüketim içindir (bunu neden yaptığına dair daha fazla ayrıntı için makalesine / koduna bakın).
Modelin ViewModel'i model özelliklerinde yapılan değişiklikler konusunda uyardığı örnekleri hiçbir yerde görmüyorum. Bu beni, belki de bir nedenden dolayı yapılmadığı konusunda endişelendiriyor. Modeldeki değişiklikler için ViewModel'i uyarmak için bir model var mı? (1) Muhtemelen her model için 1'den fazla ViewModel olduğundan ve (2) sadece bir ViewModel olsa bile, model üzerindeki bazı eylemler diğer özelliklerin değişmesine neden olabilir.
"Bunu neden yapmak istersiniz?" Şeklinde cevaplar / yorumlar olabileceğinden şüpheleniyorum. yorumlar, işte programımın bir açıklaması. MVVM'de yeniyim, bu yüzden belki de tüm tasarımım hatalı. Kısaca anlatacağım.
"Müşteri" veya "Ürün" sınıflarından daha ilginç (en azından benim için!) Bir şey programlıyorum. BlackJack'i programlıyorum.
Arkasında herhangi bir kod bulunmayan ve sadece ViewModel'deki özelliklere ve komutlara bağlanmaya dayanan bir View'um var (Josh Smith'in makalesine bakın).
İyi ya da kötü, ben Modeli gibi sadece sınıfları yer almasına da tavır aldı PlayingCard
, Deck
fakat aynı zamanda BlackJackGame
bütün oyunun durumunu tutan sınıfını ve oyuncu gitti büstü sahip olduğunda, satıcı kart çekmek zorundadır bilir ve Oyuncu ve krupiyenin şu anki skoru (21, 21'den az, bust, vb.).
Gönderen BlackJackGame
ben "drawcard" gibi yöntemleri göstermek ve onu aklıma bir kart gibi özelliklere çizildiğinde CardScore
ve IsBust
güncellenmesi gerekir ve bu yeni değerler ViewModel tebliğ. Belki de yanlış düşünme budur?
Kişi, ViewModel'in DrawCard()
yöntemi çağırdığı tavrı benimseyebilir, böylece güncellenmiş bir puan istemeyi bilmesi ve iflas edip etmediğini öğrenmesi gerekir. Görüşler?
ViewModel'imde, bir oyun kartının gerçek bir görüntüsünü (renk, rütbeye göre) alma ve görünüm için kullanılabilir hale getirme mantığına sahibim. Model bununla ilgilenmemelidir (belki başka ViewModel, kart görüntülerini oynamak yerine sadece sayıları kullanır). Elbette, belki bazıları bana Modelin bir BlackJack oyunu konseptine sahip olmaması gerektiğini ve bunun ViewModel'de ele alınması gerektiğini söyler?
OnBust
ve VM buna abone olabilir. Sanırım bir IEA yaklaşımı da kullanabilirsiniz.