2017-04-25 1 views
0

J'ai vue partagé à l'intérieur de MainPage avec son volet et contenu défini comme « sUWP SPLITVIEW communication en utilisant des événements

Le cadre du volet contient une page qui a un PageListView. Lorsque vous cliquez sur les éléments de la vue de liste, je souhaite mettre à jour le cadre de contenu.

Dans la déclaration de la page de liste, j'ai un gestionnaire d'événements délégués appelé ItemChangedEventHandler. Lorsque l'on clique sur l'élément listview, j'appelle le EventHandler qui notifierait alors tous les objets abonnés à l'événement.

Mon problème est que je n'ai pas de référence à la page du volet. Y a-t-il un moyen d'instancier une page, puis de la passer à la méthode Navigate? Si je pouvais l'instancier avant de naviguer, je pourrais référencer le PageListView.ItemChanged qui ne serait pas nul comme c'est le cas dans le code ci-dessous et ajouter le gestionnaire d'évènement serait bien. Je ne sais pas comment faire ça. Toute suggestion sera appréciée.

PageListView

public delegate void ItemChangedEventHandler(object sender, Item item); 

public sealed partial class PageListView : Page 
{ 

private void PageListView_ItemClick(object sender, ItemClickEventArgs e) 
    { 
     Item item = (Item)e.ClickedItem; 
     ItemChanged(this, item); 
    } 
} 

MainPage

public MainPage() 
    { 
     this.InitializeComponent(); 

     SplitViewPaneFrame.Navigate(typeof(PageListView)); 

     PageListView.ItemChanged += new ItemChangedEventHandler(Item_Clicked); 
    } 

    private void Item_Clicked(Object sender, Item item) 
    { 
     SplitViewContentFrame.Navigate(typeof(DetailPage), item); 
    } 
+1

Pourquoi avez-vous besoin d'une page dans le volet? Vous pouvez placer un 'ListView' directement dans le volet, puis vous abonner directement à l'événement' ItemChanged'. – AVK

Répondre

1

Je pense une meilleure approche serait d'avoir un modèle de vue de l'état encapsuler (sélection en cours sur la vue split). Les deux cadres peuvent se lier à la même instance de la classe de modèle de vue et ainsi partager les informations. Cela fonctionnerait également si vous aviez plusieurs cadres qui doivent être mis à jour en fonction de la sélection dans ListView.

Un cas fréquent pour ce modèle est un lecteur de courrier électronique ou un lecteur RSS. Voir cet exemple pour une implémentation de référence: https://github.com/Microsoft/Windows-appsample-rssreader/tree/master/RssReader