2016-08-15 2 views
0

J'ai un problème en passant l'objet à la vue secondaire dans la lumière MVVM WPF. J'ai vue principale Modèle. follow of operation. Je suis capable de câbler les choses en utilisant la lumière MVVM et les services de navigation Modren UI. Le problème est que je ne suis pas en mesure d'envoyer l'objet du modèle de vue client principal au modèle de vue secondaire. Je veux définir le contexte de données de la vue cible à partir du modèle de vue source. J'ai essayé cela mais ne semble pas fonctionner. Je ne préfère aucun code et j'ai passé beaucoup de temps sans succès.WPF MVVM Light et modren UI- Passer l'objet à la vue secondaire

public virtual void NavigateTo(string pageKey, object parameter) 
    { 
     lock (_pagesByKey) 
     { 
      if (!_pagesByKey.ContainsKey(pageKey)) 
      { 
       throw new ArgumentException(string.Format("No such page: {0}. Did you forget to call NavigationService.Configure?", pageKey), "pageKey"); 
      } 

      var frame = GetDescendantFromName(Application.Current.MainWindow, "ContentFrame") as ModernFrame; 

      // Set the frame source, which initiates navigation 
      if (frame != null) 
      { 
       frame.Source = _pagesByKey[pageKey]; 
       //i Dont know if this should work or not 
       frame.DataContext = parameter; 

      } 
      Parameter = parameter; 
      _historic.Add(pageKey); 
      CurrentPageKey = pageKey; 
     } 
    } 

toute aide sera grandement appréciée. J'ai juste besoin de comment je peux définir le datacontext de Target View sans utiliser de code derrière. Merci

Répondre

0

Il existe plusieurs possibilités, mais une qui ne crée pas de dépendances entre vos viewmodels est d'utiliser pub/sub system in MVVMLight. Fondamentalement, cela se passe comme suit:

Lorsque vous sélectionnez une entité de votre vue et passez à une autre, viewmodel envoie un message qui véhicule cette entité. Dans l'autre viewmodel, vous recevez le message et définissez certaines propriétés en conséquence (pour l'édition, l'ajout d'une nouvelle entité, etc.)

// mainviewmodel 
Messenger.Default.Send(new MyMessage(myObj)); 

// otherviewmodel 
Messenger.Default.Register<MyMessage>(this, message => 
{ 
    /* do something with message.MyObj */ 
}); 

// mymessage 
public class MyMessage : MessageBase 
{ 
    ... 
    public MyObj MyObj { get; set; } 
}