2010-04-23 16 views
15

Bir Silverlight uygulaması oluşturmak için mvvm ışığı kullanıyorum. Bir görünüm modelinin özelliğine veya komutuna başka bir görünüm modelinden veya kullanıcı denetimi kodunun arkasına nasıl erişileceğini gösteren bir kod parçacığı var mı?MVVM ışığı - diğer görünüm modelindeki özelliğe nasıl erişilir?

Sanırım basit, ama bir şekilde bir şeyleri kaçırdım.

Ueli

+0

Denetimlerinizin uygulanmasına bağlıdır. ViewModel'i bir üst görünüm altında olan görünümler arasında mı paylaşıyorsunuz yoksa yalnızca iki bağımsız görünüm arasındaki özelliği/Komutu paylaşmaya mı çalışıyorsunuz? –

+0

Söz konusu görünüm farklı görünümlerde iç içe olabilir ancak bağımsız bir görüntü modelinden bir özelliğe erişebilmesi gereken bir görünüm modelinde geçiş yapar. Benim somut durumda, şu anda oturum açmış olan kullanıcı hakkında bir bilgi almak (bir bağımsız UserViewModel'de saklanan ve saklanan) bir web servisine çağrı yapmak için bir CardViewModel. –

cevap

34

Bunu yapmak için Messenger kullanabilirsiniz: UserViewModel kullanıcıyı Gönder:

Messenger.Send<User>(userInstance); 

sadece ilgilenen herkes için kullanıcı gönderirdi.

Ve CardViewModel bir alıcıyı kayıt: UserViewModel içinde bu konuda

Messenger.Send<String, UserViewModel>("Gimme user"); 

Ve tepki:: Ayrıca kullanıcıyı bağırarak için CardViewModel bir istek gönderebilir

Messenger.Register<User>(this, delegate(User curUser){_curUser = curUser;}); 

veya

Messenger.Register<String>(this, delegate(String msg) 
{ 
if(msg == "Gimme user") 
Messenger.Send<User>(userInstance); 
}); 

(Gerçek bir senaryoda bir dizeyi değil, bir dizeyi kullanmanız daha iyi olur:)) Doğrudan yanıt bile verebilir ancak şu anda kontrol edemiyorum.

Sadece bu check out: Mvvm light Messenger

+0

Mükemmel, ihtiyacım olan buydu. (ve şimdi beni aptal gibi hissettirdiği çok açık görünüyor ...). Teşekkürler ond n Gruess bizi Brezilya. –

+0

Hoş Geldiniz :) ve zalim uss de chalte schwiiz zrugg;) – CodeWeasel

4

bir başka yolu da değişiklik yayınlayan RaisePropertyChanged aşırı yüklenmeyi kullanmaktır. Bunu yapacağını:

RaisePropertyChanged(() => MyProperty, oldValue, newValue, true); 

Ardından abone şekildedir: T myProperty türüdür

Messenger.Default.Register<PropertyChangedMessage<T>>(this, Handler); 

.

Alkış Laurent sorun aramak için

0

başka yolu "anda oturum açan" döndüren bir hizmet sahip olmaktır.

Kimlerin oturum açtığını ele alma sorumluluğu zaten bir hizmetin sorumluluğundadır ve ViewModels basit kalır.

ViewModels yalnızca Görünüm için mevcut olmalıdır. Ancak iyi vatandaşlar olmak, Laurent ve CodeWeasel gibi diğer ViewModel'lere yardımcı olabilirler.

İlgili konular