none
Aus der MSDN-Hotline: Aktuelle Hub-Section im Hub RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,
    heute wurde uns bei der MSDN-Entwickler-Hotline unter anderem folgende Frage gestellt:

    Ich entwickle gerade eine Windows Phone 8.1 Anwendung und habe eine Seite mit einem Hub.
    Nun verwende ich folgenden Code, um in Abhängigkeit der aktuell ausgewählten Hub-Section Informationen der Seite wie beispielsweise die Command-Bar zu aktualisieren:

    <Hub Header="Hub" SectionsInViewChanged="Hub_SectionsInViewChanged">
        <HubSection Name="Section1" Header="Section 1">
            ...
        </HubSection>
        <HubSection Name="Section2" Header="Section 1">
            ...
        </HubSection>
        ...
    </Hub>
    und
    private HubSection lastSelectedHubSection;
    
    private void Hub_SectionsInViewChanged(object sender, SectionsInViewChangedEventArgs e)
    {
        var section = Hub.SectionsInView[0];
        if (lastSelectedHubSection != section)
            return;
        
        lastSelectedHubSection = section;
        
        //Zum Beispiel:
        PageCommandBar.PrimaryCommands.Clear();
        if (section == Section1)
            PageCommandBar.PrimaryCommands.Add(new AppBarButton { 
                Icon = new SymbolIcon(Symbol.Add), Label = "Hinzufügen" });
    }

    Wenn ich aber nun zu einer Hub-Section mit folgendem Code springe, wird die Seite nicht wie gewünscht aktualisiert:

    var section = Hub.SectionsInView[0];
    Hub.ScrollToSection(Section1);
    //an dieser Stelle gilt: nun section == Hub.SectionsInView[0]
    //auch, wenn section != Section1.

    Wie kann ich das Problem lösen?

    Unsere Antwort bzw. unser Lösungsvorschlag darauf war:

    Mit folgendem Workaround kann das Problem gelöst werden:

    private HubSection lastSelectedHubSection;
    
    private void Hub_SectionsInViewChanged(object sender, SectionsInViewChangedEventArgs e)
    {
        var section = Hub.SectionsInView[0];
        if (lastSelectedHubSection != section)
            return;
        
        lastSelectedHubSection = section;
        
        UpdateHubSection(section);
    }
    
    private void UpdateHubSection(HubSection currentHubSection)
    {
        //Zum Beispiel:
        PageCommandBar.PrimaryCommands.Clear();
        if (currentHubSection == Section1)
            PageCommandBar.PrimaryCommands.Add(new AppBarButton { 
                Icon = new SymbolIcon(Symbol.Add), Label = "Hinzufügen" });
    }
    
    private void ScrollToSection(HubSection section)
    {
        Hub.ScrollToSection(section);
        UpdateHubSection(section);
    }

    Mit folgendem Code kann dann zu einer Hub-Section gesprungen werden:

    ScrollToSection(Section1);

    Wir hoffen, vielen Besuchern der MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.

    Viele Grüße,
    Henning Dieterichs
    Entwickler-Hotline für MSDN Online Deutschland

    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN-Entwickler-Hotline: http://www.msdn-online.de/Hotline
    MSDN-Entwickler-Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN-Entwickler-Hotline und dieses Posting diese Nutzungsbedingungen , Hinweise zu Markenzeichen, Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN-Entwickler-Hotline .

    Dienstag, 25. November 2014 13:29

Alle Antworten

  • Vielen Dank für das aufschlussreiche Verfahren, das Sie mitgeteilt haben.

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht,  kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 25. November 2014 14:12