2010-03-01 6 views
1

Merci d'avoir pris le temps de lire ma question. Toute orientation est vraiment appréciée. J'utilise le cadre de navigation SL3 dans mon application métier. J'utilise le cadre de navigation SL3. J'utilise actuellement MVVM Light comme guide de base.SL3 Nav framework + MVVM ligh

J'ai une DataGrid composée d'employés et lorsque l'utilisateur clique sur "Employee ID Link" dans la grille de données, je transfère l'utilisateur à "Edit Page". Je voudrais transférer le "id d'employé" comme paramètre de requête à "éditer la page".

Le problème ici est: Je peux accéder au paramètre de requête dans le EditStaffView.xaml.cs - que je ne veux pas faire.

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     if (this.NavigationContext.QueryString.ContainsKey("staffcode")) 
     { 
      string title = this.NavigationContext.QueryString["staffcode"]; 
     } 
    } 

Je voudrais récupérer le paramètre de requête dans mon viewmodel et en fonction du paramètre de requête, je vais effectuer certaines opérations. Lorsque le constructeur est appelé, je voudrais que la « vue » de passer le StaffID comme indiqué ci-dessous

public EditStaffViewModel(int staffId) 
    { 
     LoadData(staffId); 
    } 

je construis mes boutons de lien hypertexte dans le DataGrid dyanmically comme indiqué ci-dessous:

staffListingModel.HyperlinkNavigationUri = chaîne. Format ("{0} {1}", NavigationUri.DataEntryEditStaff, "? Staffcode = {" + staffListingModel.StaffCode + "}");

et XAML regarde

HyperlinkButton Content = "{Binding StaffCode, mode = TwoWay}" NavigateUri = "{Binding HyperlinkNavigationUri}"> HyperlinkButton

Toute idée comment faire cela? ?

Merci pour l'aide. Murari

Répondre

0

Je ne voudrais pas aller avec le Querystring. puisque vous utilisez MVVM Light Toolkit. Jetez un oeil à la messagerie et profiter du public un modèle d'abonné. Similaire à l'agrégateur d'événements PRISM.

Envoyez le "Staffcode" et abonnez-vous dans chaque viewmodel qui en a besoin. Vous pouvez également envoyer l'objet employé entier.

Messenger.Default.Send (selectedEmployee);

Messenger.Default.Subscribe (this); Reportez-vous à ce lien pour Messinging: http://blog.galasoft.ch/archive/2010/03/16/whatrsquos-new-in-mvvm-light-v3.aspx EventAggregator: http://msdn.microsoft.com/en-us/library/cc707867.aspx

En cas de liens hypertextes profonds et la navigation en combinaison avec MVVM vous devez penser différemment. La communication entre ViewModels doit être effectuée par Messenging. Eventaggregator ou Messenger.

Espérons que cela aide ...