2009-02-03 14 views
8

Ben bir yapılandırma dosyasının içeriğini değiştirmek için bir çok temel WPF uygulama yazıyorumMVVM modelinde model ve görünüm modeli arasında tutarlılığı nasıl koruyabilirim?

Problem Durumu. Veri formatı bir şemaya sahip bir XML dosyasıdır. Ben MVVM için bir öğrenme projesi olarak kullanmak istiyorum, bu yüzden usulüne uygun

  • Modeli içine kod ayırdım: C# sınıfları otomatik oluşturulan

  • Görünüm-Modeli Xsd.exe dan : Modelin görüntü dostu gösterimi.

  • Görünüm: Xaml ve

anlıyorum arkasında boş kod Görünüm-model bir esinti Görünüm bağlayıcı hale nasıl. Ancak, bu, Görünüm Modeli < -> Model semantiği çok garip değil mi? Xsd.exe, çoklu XML öğeleri için dizilerle C# sınıfları oluşturur. Bununla birlikte, V-VM düzeyinde Gözlemlenebilir Koleksiyonlara ihtiyacınız var.

Sorular:

bu mu gerçekten uyum içinde aynı verileri temsil eden iki tamamen farklı koleksiyon türleri tutmak zorunda mı?

Model ile Görünüm Modeli arasında tutarlılığı sürdürmek için en iyi yöntemler nelerdir?

cevap

6

Ben büyük bir uzman değilim, ama bence bu evet. Genel fikir, gerçekten de, görünüm ve viewModel ile Bağlama arasındaki değişimi ve daha sonra ViewModel ve Model arasında olaylar (Model -> ViewModel yönü) veya bağımlılık (diğer yönde) arasındaki yayılımı yaymaktır.

Bunun ne kadar standart olduğunu bilmiyorum, ancak MVVM konusundaki anlayışım, ViewModel'in modele bir başvuru tutması gerektiğidir, böylece kullanıcı görünümü değiştirdiğinde, ViewModel modelde uygun kodu çağırmalıdır. Diğer bir yol ise, Model değiştirildiği zaman olayları ortaya çıkarmalı ve ViewModel buna göre kendini güncellemelidir (ViewModel modele bir gözlemci).

2

@Bu gerçekten, aynı verileri tutarlı bir şekilde temsil eden iki farklı koleksiyon türünü saklamak zorunda olduğum anlamına mı geliyor?

Sanırım evet. Oldukça sıkıcı ama çok iyi çalışıyor. Umarım, gelecekte ViewModel parçasını oluşturmak için bir kod üreteci de olacaktır.

Karl

bunun üzerinde çalışıyor: http://karlshifflett.wordpress.com/mvvm/

2

Öyle, evet, modelde ve ViewModel iki tamamen farklı koleksiyon türleri gerekecektir ViewModel açıkça ObservableCollections gerekir.

MVVM'de geri alma/yineleme yapmakla ilgili bir makale hazırladım. MirrorCollection dediğim şeyi kullanır: bir ObservableCollection türetilmiş sınıf cadı öğelerini bir Listeden (modelin listesi) otomatik olarak alır.

İlginç bir çözüm olduğunu düşünüyorum, buradan eşyalar (burada MirrorCollection tanımıdır) Part 1: Using the Viewmodel pattern to provide Undo/Redo in WPF

Part 2: Viewmodelling lists

0

Modeli Olaylar veya delege açığa çıkarırsan aynı kanca bulabilirsiniz ViewModel'de, modeldeki herhangi bir değer, event veya delegeler ve Viewmodle aracılığıyla viewmodel'e bildirdiğinde, UI'yi güncelleyebilirsiniz.

Görüntü modelinden modele kadar basit bir şekilde güncellemek istiyorsanız, yalnızca bazı yöntemlerden birini çağırıp yeni değerleri iletin

İlgili konular