2010-04-19 12 views
6

MVVM ışığı ile ilgili şu sorularım var: Kullanıcı Arabirimi ne "kullanıyor?" Gördüğüm her ViewModel görüntüleyebileceğimi görüyorum; ViewLocator, tüm ViewModels'i (anladığım kadarıyla önbelleğe almak için) işler. Fakat kullanıcı arayüzü ne kullanıyor?Silverlight'ta MVVM ışığı için bir görüş kontrol cihazına ihtiyacım var mı?

ben "showDetail" diyor benim ViewModel tanımlanan bir Command varsa; ViewModel içinde bu View görüntülemek için kod yazmak zorunda mıyım?

bunların hiçbirini örnekleri var mı? Teşekkürler! MVVM yılında

cevap

1

ne "sürücüler" görünümü veri bağlayıcıdır. Görünüm modeline işaret etmek için Görünümün DataContext'i ayarlayarak ViewModel'e bağlayabilirsiniz.

Basit bir örnek (kullanarak MVVM Işık)

MyViewModel.cs

public class MyViewModel : ViewModelBase 
{ 
    (...) 
    private string _myProperty; 
    public string MyProperty { 
     get { return _myProperty; } 
     set { 
      _myProperty = value; 
      RaisePropertyChanged("MyProperty"); 
     } 
    } 
} 

MyView.xaml.cs

void MyView() { 
    DataContext = new MyViewModel(); 
} 

MyView.xaml

<TextBlock Text="{Binding MyProperty}" /> 
+1

Sorularım, farklı görüntülerin yüklenmesine bağlı. Bir ViewModel ile bağlama mekanizmasını anlıyorum. Ancak, kullanıcı örneğin "Ayrıntıları Göster" düğmesini çalıştırdığında yeni bir Görünümü gösterecek kodu nereye yazarım? –

5

MVVM desen kendi başına ha değil ve görünümler arasında gezinmek için özel bir şey. Bununla birlikte, birkaç çerçevede bunun için birçok çözüm vardır. en yaygın çözüm "orchestrates" ana Görünüm veya subviews için bir "Master-Detay" yaklaşımını kullanmak kontrolörün çeşit kullanmaktır.

Bazı ilginç çözümler: Rishi Oberoi (Orktane) tarafından

tarafından Karl Shifflett
  • "Subview" approach tarafından
  • Ocean 'ın Görünüm Yöneticisi
  • 1

    Bir T4 şablonu oluşturdum tha t kodu üretir ve bir uri veya nesneye nasıl gidileceğini veya bir pencerenin (wpf) nasıl kapanacağını gösterir. Ben size Cinch V2 kontrol düşünüyorum MVVM ışık

    Download here

    0

    çalışır: umut verici sessiz görünüyor

    http://www.codeproject.com/KB/WPF/CinchV2_1.aspx

    . Ancak bu çerçevelerin çoğunun oldukça zor olduğunu düşünüyorum.

    Ben Görüntüleme ve Görünüm-Modeller arasındaki iletişimi yönetir denetleme kontrolör desen çeşit basit bir MVVM yaklaşımla bir çözüm uyguladı.

    0

    MVVM ışık araç setinde Mesajlaşma sistemi üzerinde bunu okumak-up öneriyoruz. Bu, bunu başarmak için bulduğum en basit yaklaşım gibi görünüyor.Eğer 2 görünüm modellerini varsa

    - arayan müşteriler için 1, seçilen müşteri hakkında ekran detaylar için diğer:: Şu şekilde çalışır bir örnektir

    ilk görünümü modelinde, bir özelliği gibi var

    void registerForMessages() 
        { 
         Messenger.Default.Register<PropertyChangedMessage<string>>(this, 
          (pcm) => 
          { 
           if (pcm.PropertyName == "CustomerID") 
           { 
            customerID = pcm.NewValue; 
            AddWorkplanCommand.RaiseCanExecuteChanged(); 
            loadCustomerDetails(); 
           } 
          }); 
        } 
    

    olun: Bu: Bunun gibi diğer bu değer değişiklikleri, ne zaman

    public string CustomerID 
        { 
         get 
         { 
          return _customerid; 
         } 
    
         set 
         { 
          if (_efolderid == value) 
          { 
           return; 
          } 
    
          var oldValue = _customerid; 
          _customerid = value; 
    
          // Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging 
          RaisePropertyChanged("CustomerID", oldValue, value, true); 
         } 
        } 
    

    Daha sonra, ikinci görüş modelinde, mesajları alma için kayıt ikinci görünüm modelinin yapıcısında registerForMessages() işlevini çağırdığınızdan emin olun. Yardımcı olan başka bir şey, uygulamanızda 4 veya daha fazla ViewModels bulunduğunuzda bir çeşit harita oluşturmaktır. Bulunduğum tüm mesajları ve neyi başarmak istediklerini ve bunları elde etmek için başka hangi görünüm modellerinin kaydedildiğini bulmak için, çözümdeki hızlı metin dosyasında bir tane oluşturmanın kolay olduğunu düşünüyorum.

    Bu konuda gerçekten güzel olan şeylerden biri, 1 viewmodel'in customerID özelliği değişmiş gibi bir değişiklik bildirimi göndermesi ve hemen hemen diğer 4 farklı görünüm modelinin bu değişikliği ve tüm başlatma yüklemelerini kendilerinin değiştirdiğini anlamasıdır.

    İlgili konular