2016-04-04 14 views
-1

Bir etkinlik oluşturmak istiyorum ve başka bir ViewModel'de abone olmak istiyorum. Olay işleyicisi her zaman ilk ViewModel'de boş oluyor.EventHandler her zaman boş mu?

public event EventHandler EditSearchChanged; 

takip eder ve

 if (EditSearchChanged != null) 
     { 
      EditSearchChanged(this, null); 
     } 

ikinci ViewModel, ben ilk ViewModel bir özelliğini ilan ettiler gibi yetiştirilmiş olarak ilk ViewModel ben Etkinlik ilan kaldırdı.

private EditTileViewModel editTileVM; 

    public EditTileViewModel EditTileVM 
    { 
     get 
     { 
      return editTileVM ?? (editTileVM = new EditTileViewModel()); 
     } 
     set 
     { 
      editTileVM = value; 
      RaisePropertyChanged(); 
     } 
    } 

ve

EditTileVM.EditSearchChanged += EditTileVM_EditSearchChanged; 

    private void EditTileVM_EditSearchChanged(object sender, EventArgs e) 
    { 
     this.EditTileVM = (sender as EditTileViewModel); 
    } 

Debugger Sonucu aşağıdaki özelliğinde ViewModel başka yeni bir örneğini oluşturmak gibi olur enter image description here

+0

İşte EditSearchChanged – subminer

+0

mi null mümkün olduğu hat 'EditTileVM.EditSearchChanged + = EditTileVM_EditSearchChanged;' asla idam edilmez ve bu nedenle asla ayarlanmaz mı? Belki biraz daha kod ister misin? – mnemonic

+1

'EditTileVM.EditSearchChanged + = EditTileVM_EditSearchChanged' adlı bir hata ayıklayıcı yerleştirebilir ve işlenip tetiklenmediğini kontrol edebilir misiniz? – Rohit

cevap

0

etkinliği şu şekilde abone:

private EditTileViewModel editTileVM; 
public EditTileViewModel EditTileVM 
{ 
    get 
    { 
     return editTileVM ?? (editTileVM = new EditTileViewModel()); 
    } 
    set 
    { 
     editTileVM = value; 
     RaisePropertyChanged(); 
    } 
} 

Yani iki insta var EditViewModel'un ncesidir. Rachel Lim çok iyi bir öğretici yaklaşık simplified Event Aggregator pattern bakınız

// Subscribe 
eventAggregator.GetEvent<CloseAppliactionMessage>().Subscribe(ExitMethod); 

// Broadcast 
eventAggregator.GetEvent<CloseAppliactionMessage>().Publish(); 

:

Sana EventAggregator pattern Prizma çerçevesinden viewModels iki arasında kullanılacak öneriyoruz.

Veya kullanmak MVVM Light messenger:

//Subscribe 
Messenger.Default.Register<CloseAppliactionMessage>(ExitMethod); 

// Broadcast 
Messenger.Default.Send<CloseAppliactionMessage 
+0

@subminer herhangi bir soru sormakta çekinmeyin. Cevabımın size yardımcı olduğunu düşünüyorsanız, diğer kişilerin gelecekteki aramalarını basitleştirmek için cevabımı bir yanıt olarak işaretleyebilirsiniz. Lütfen şu http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work sayfasını okuyun – StepUp