/// <summary>
        /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
        /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
        /// </summary>
        /// <param name="sender">
        /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
        /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
        /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
        /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            int groupId = -1;
            int ballotId = -1;
            if (e.NavigationParameter != null)
            {
                string navParam = e.NavigationParameter as string;
                string[] navParams = navParam.Split(new string[] { "?", "=" }, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < navParams.Length; i++)
                {
                    if (navParams[i] == "groupId" && i + 1 < navParams.Length)
                    {
                        int.TryParse(navParams[i + 1], out groupId);
                    }
                    else if (navParams[i] == "ballotId" && i + 1 < navParams.Length)
                    {
                        int.TryParse(navParams[i + 1], out ballotId);
                    }
                }
            }

            if (groupId != -1 && ballotId == -1)
            {
                isAddBallotDialog = true;
                await addAndEditBallotViewModel.LoadCreateBallotDialogAsync(groupId);
            }
            else if (groupId != -1 && ballotId != -1)
            {
                isAddBallotDialog = false;
                await addAndEditBallotViewModel.LoadEditBallotDialogAsync(groupId, ballotId);
            }
        }
        /// <summary>
        /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
        /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
        /// </summary>
        /// <param name="sender">
        /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
        /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
        /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
        /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            if (e.NavigationParameter != null && e.NavigationParameter.GetType() == typeof(int))
            {
                // Lade Dialog zum Hinzufügen neuer Konversation.
                int groupId = Convert.ToInt32(e.NavigationParameter);
                addAndEditConversationViewModel.LoadAddConversationDialog(groupId);
            }
            else if (e.NavigationParameter != null && e.NavigationParameter.GetType() == typeof(string))
            {
                int groupId = -1;
                int conversationId = -1;

                string navParam = e.NavigationParameter as string;
                string[] navParams = navParam.Split(new string[] { "?", "=" }, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < navParams.Length; i++)
                {
                    if (navParams[i] == "groupId" && i + 1 < navParams.Length)
                    {
                        int.TryParse(navParams[i + 1], out groupId);
                    }
                    else if (navParams[i] == "conversationId" && i + 1 < navParams.Length)
                    {
                        int.TryParse(navParams[i + 1], out conversationId);
                    }
                }

                if (groupId != -1 && conversationId != -1)
                {
                    await addAndEditConversationViewModel.LoadEditConversationDialogAsync(groupId, conversationId);
                }
            }
        }
 /// <summary>
 /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
 /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
 /// </summary>
 /// <param name="sender">
 /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
 /// </param>
 /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
 /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
 /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
 /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
 private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
 {
     if (e.NavigationParameter != null)
     {
         int channelId = Convert.ToInt32(e.NavigationParameter);
         await addAnnouncementViewModel.LoadSelectedChannelAsync(channelId);
     }
 }
 /// <summary>
 /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
 /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
 /// </summary>
 /// <param name="sender">
 /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
 /// </param>
 /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
 /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
 /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
 /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
 private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
 {
     if (e.NavigationParameter != null)
     {
         int groupId = Convert.ToInt32(e.NavigationParameter);
         groupSettingsViewModel.LoadGroupSettings(groupId);
     }
 }
        /// <summary>
        /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
        /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
        /// </summary>
        /// <param name="sender">
        /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
        /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
        /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
        /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            if (e.NavigationParameter != null)
            {
                int reminderId = Convert.ToInt32(e.NavigationParameter);

                await reminderDetailsViewModel.LoadSelectedReminderAsync(reminderId);
            }
        }
 /// <summary>
 /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
 /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
 /// </summary>
 /// <param name="sender">
 /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
 /// </param>
 /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
 /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
 /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
 /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
 private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
 {
     // Erforderlich wegen Caching. Falls Seite aus Cache geladen wird und Drawer war offen
     // bleibt er sonst offen.
     if (DrawerLayout.IsDrawerOpen)
     {
         DrawerLayout.CloseDrawer();
     }
 }
        /// <summary>
        /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
        /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
        /// </summary>
        /// <param name="sender">
        /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
        /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
        /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
        /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            // Erforderlich wegen Caching. Falls Seite aus Cache geladen wird und Drawer war offen
            // bleibt er sonst offen.
            if (DrawerLayout.IsDrawerOpen)
            {
                DrawerLayout.CloseDrawer();
            }

            await moderatorHomescreenViewModel.LoadManagedChannelsAsync();
            subscribeToPushManagerEvents();
        }
 /// <summary>
 /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
 /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
 /// </summary>
 /// <param name="sender">
 /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
 /// </param>
 /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
 /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
 /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
 /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
 private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
 {
     if (e.NavigationParameter != null)
     {
         // Lade Dialog zum Bearbeiten des Kanals.
         int channelId = Convert.ToInt32(e.NavigationParameter);
         await addAndEditChannelViewModel.LoadEditChannelDialogAsync(channelId);
     }
     else
     {
         // Lade Dialog zum Anlegen eines Kanals.
         addAndEditChannelViewModel.LoadAddChannelDialog();
     }
 }
 /// <summary>
 /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
 /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
 /// </summary>
 /// <param name="sender">
 /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
 /// </param>
 /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
 /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
 /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
 /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
 private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
 {
     Debug.WriteLine("In LoadState of ChannelSettings page. NavigationParameter is: {0}.", e.NavigationParameter);
     if (e.NavigationParameter != null)
     {
         // Lade den Zustand im ViewModel mit dem übergebenen Parameterwert.
         int selectedChannelId;
         bool successful = int.TryParse(e.NavigationParameter.ToString(), out selectedChannelId);
         if (successful)
         {
             channelSettingsViewModel.LoadSettingsOfSelectedChannel(selectedChannelId);
         }
     }
 }
 /// <summary>
 /// Populates the page with content passed during navigation.  Any saved state is also
 /// provided when recreating a page from a prior session.
 /// </summary>
 /// <param name="sender">
 /// The source of the event; typically <see cref="NavigationHelper"/>
 /// </param>
 /// <param name="e">Event data that provides both the navigation parameter passed to
 /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested and
 /// a dictionary of state preserved by this page during an earlier
 /// session.  The state will be null the first time a page is visited.</param>
 private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
 {
     if (e.NavigationParameter == null)
     {
         // Erstellungsdialog.
         addAndEditGroupViewModel.LoadCreateDialog();
     }
     else if (e.NavigationParameter.GetType() == typeof(int))
     {
         // Änderungsdialog.
         int groupId = Convert.ToInt32(e.NavigationParameter);
         addAndEditGroupViewModel.LoadEditDialog(groupId);
     }
 }
        /// <summary>
        /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
        /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
        /// </summary>
        /// <param name="sender">
        /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
        /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
        /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
        /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            // Erforderlich wegen Caching. Falls Seite aus Cache geladen wird und Drawer war offen
            // bleibt er sonst offen.
            if (DrawerLayout.IsDrawerOpen)
            {
                DrawerLayout.CloseDrawer();
            }

            // Lade die Kanaldaten für die Anzeige.
            await searchChannelsViewModel.LoadChannelsAsync();
            // Starte Aktualisierungsprozess von Kanaldaten.
            await searchChannelsViewModel.UpdateLocalChannelListAsync(false);
        }
        /// <summary>
        /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
        /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
        /// </summary>
        /// <param name="sender">
        /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
        /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
        /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
        /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            int channelId = -1;
            int reminderId = -1;
            if (e.NavigationParameter != null)
            {
                string navParam = e.NavigationParameter as string;
                string[] navParams = navParam.Split(new string [] {"?", "="}, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < navParams.Length; i++)
                {
                    if (navParams[i] == "channelId" && i+1 < navParams.Length) {
                        int.TryParse(navParams[i+1], out channelId);
                    }
                    else if (navParams[i] == "reminderId" && i + 1 < navParams.Length)
                    {
                        int.TryParse(navParams[i + 1], out reminderId);
                    }
                }
            }
            
            if (channelId != -1)
            {
                // Lade Channel
                await addAndEditReminderViewModel.LoadSelectedChannelAsync(channelId);

                if (reminderId != -1)
                {
                    // Lade Dialog 'Reminder bearbeiten'
                    await addAndEditReminderViewModel.LoadEditReminderDialogAsync(reminderId);
                }
                else
                {
                    // Lade Dialog "Reminder hinzufügen."
                    addAndEditReminderViewModel.LoadAddReminderDialog();
                }
            }
        }
        /// <summary>
        /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
        /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
        /// </summary>
        /// <param name="sender">
        /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
        /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
        /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
        /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            // Prüfe, ob ein Index gespeichert ist, der angibt, auf welchem PivotItem der Nutzer zuletzt war.
            if (e.PageState != null &&
                e.PageState.Keys.Contains("PivotIndex") &&
                e.PageState["PivotIndex"] != null)
            {
                int selectedIndex = 0;
                bool successful = int.TryParse(e.PageState["PivotIndex"].ToString(), out selectedIndex);

                // Falls es einen gespeicherten PivotIndex gibt, setze ihn wieder aktiv.
                if (successful && BallotDetailsPivot != null)
                    BallotDetailsPivot.SelectedIndex = selectedIndex;
            }

            int groupId = -1;
            int ballotId = -1;
            if (e.NavigationParameter != null)
            {
                string navParam = e.NavigationParameter as string;
                string[] navParams = navParam.Split(new string[] { "?", "=" }, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i < navParams.Length; i++)
                {
                    if (navParams[i] == "groupId" && i + 1 < navParams.Length)
                    {
                        int.TryParse(navParams[i + 1], out groupId);
                    }
                    else if (navParams[i] == "ballotId" && i + 1 < navParams.Length)
                    {
                        int.TryParse(navParams[i + 1], out ballotId);
                    }
                }
            }

            if (ballotId != -1 && groupId != -1)
            {
                await ballotDetailsViewModel.LoadBallotAsync(groupId, ballotId);

                subscribeToPushManagerEvents();
            }
        }
        /// <summary>
        /// Ermittelt, ob gespeichert ist, welches PivotItem zuletzt aktiv war.
        /// Ist das der Fall, so wird dieses beim Laden der Seite wieder aktiv gesetzt.
        /// </summary>
        /// <param name="e">Die Parameter des Ladevorgangs.</param>
        private void determineLastActivePivotItem(LoadStateEventArgs e)
        {
            // Prüfe, ob ein Index gespeichert ist, der angibt, auf welchem PivotItem der Nutzer zuletzt war.
            if (e.PageState != null &&
                e.PageState.Keys.Contains("PivotIndex") &&
                e.PageState["PivotIndex"] != null)
            {
                int selectedIndex = 0;
                bool successful = int.TryParse(e.PageState["PivotIndex"].ToString(), out selectedIndex);

                // Falls es einen gespeicherten PivotIndex gibt, setze ihn wieder aktiv.
                if (successful && GroupDetailsPivot != null && 
                    GroupDetailsPivot.Items != null && GroupDetailsPivot.Items.Count > selectedIndex)
                {
                    GroupDetailsPivot.SelectedIndex = selectedIndex;
                }
            }
        }
 /// <summary>
 /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
 /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
 /// </summary>
 /// <param name="sender">
 /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
 /// </param>
 /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
 /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
 /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
 /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
 private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
 {
     applicationSettingsViewModel.LoadCurrentSettings();
 }
        /// <summary>
        /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
        /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
        /// </summary>
        /// <param name="sender">
        /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
        /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
        /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
        /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            if (e.NavigationParameter != null)
            {
                int conversationId = Convert.ToInt32(e.NavigationParameter);
                await conversationDetailsViewModel.LoadSelectedConversationAsync(conversationId);
            }

            // Registrierung für View relevante Push Notification Events.
            subscribeToPushManagerEvents();
        }
 /// <summary>
 /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
 /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
 /// </summary>
 /// <param name="sender">
 /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
 /// </param>
 /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
 /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
 /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
 /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
 private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
 {
 }
        /// <summary>
        /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
        /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
        /// </summary>
        /// <param name="sender">
        /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
        /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
        /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
        /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            // Prüfe, ob ein Index gespeichert ist, der angibt, auf welchem PivotItem der Nutzer zuletzt war.
            if (e.PageState != null &&
                e.PageState.Keys.Contains("PivotIndex") &&
                e.PageState["PivotIndex"] != null)
            {
                int selectedIndex = 0;
                bool successful = int.TryParse(e.PageState["PivotIndex"].ToString(), out selectedIndex);

                // Falls es einen gespeicherten PivotIndex gibt, setze ihn wieder aktiv.
                if (successful && ModeratorChannelDetailsPivot != null)
                    ModeratorChannelDetailsPivot.SelectedIndex = selectedIndex;
            }

            // Lade die Seite.
            if (e.NavigationParameter != null)
            {
                int channelId = Convert.ToInt32(e.NavigationParameter);
                moderatorChannelDetailsViewModel.LoadSelectedChannel(channelId);
                await moderatorChannelDetailsViewModel.PerformAnnouncementUpdateAsync();
                await moderatorChannelDetailsViewModel.LoadRemindersOfChannelAsync();
                await moderatorChannelDetailsViewModel.CheckForMissingRemindersAsync();
                await moderatorChannelDetailsViewModel.LoadModeratorsOfChannelAsync();
            }

            subscribeToPushManagerEvents();
        }
        /// <summary>
        /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
        /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
        /// </summary>
        /// <param name="sender">
        /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
        /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
        /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
        /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            // Für den Typvergleich, siehe hier: http://stackoverflow.com/questions/983030/type-checking-typeof-gettype-or-is
            if (e.NavigationParameter != null && e.NavigationParameter.GetType() == typeof(string))
            {
                Debug.WriteLine("GroupDetails: Starting to load group from temporary storage.");
               await groupDetailsViewModel.LoadGroupFromTemporaryCacheAsync(e.NavigationParameter as string);
            }
            else if (e.NavigationParameter != null && e.NavigationParameter.GetType() == typeof(int))
            {
                determineLastActivePivotItem(e);
                Debug.WriteLine("GroupDetails: Starting to load group from local storage.");
                int groupId = Convert.ToInt32(e.NavigationParameter);
                await groupDetailsViewModel.LoadGroupFromLocalStorageAsync(groupId);

                // Lade Konversationen.
                await groupDetailsViewModel.LoadConversationsAsync(groupId);

                // Lade Abstimmungen.
                await groupDetailsViewModel.LoadBallotsAsync(groupId);
            }          

            // Registriere Seite für relevante Push Notification Events.
            subscribeToPushManagerEvents();

            // Prüfe ob Auto sync notwendig, und führe ihn gegebenenfalls aus.
            await groupDetailsViewModel.PerformAutoSync();
        }
        /// <summary>
        /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
        /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
        /// </summary>
        /// <param name="sender">
        /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
        /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
        /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
        /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
        private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            //Debug.WriteLine("In LoadState of ChannelDetails page. NavigationParameter is: {0}.", e.NavigationParameter);

            // Prüfe, ob ein Index gespeichert ist, der angibt, auf welchem PivotItem der Nutzer zuletzt war.
            if (e.PageState != null &&
                e.PageState.Keys.Contains("PivotIndex") &&
                e.PageState["PivotIndex"] != null)
            {
                int selectedIndex = 0;
                bool successful = int.TryParse(e.PageState["PivotIndex"].ToString(), out selectedIndex);

                // Falls es einen gespeicherten PivotIndex gibt, setze ihn wieder aktiv.
                if (successful && ChannelDetailsPivot != null)
                    ChannelDetailsPivot.SelectedIndex = selectedIndex;
            }

            if(e.NavigationParameter != null)
            {
                // Lade den Zustand im ViewModel mit dem übergebenen Parameterwert.
                int selectedChannelId;
                bool successful = int.TryParse(e.NavigationParameter.ToString(), out selectedChannelId);
                if (successful)
                {
                    channelDetailsViewModel.LoadSelectedChannel(selectedChannelId);
                }
       
                // Registriere View für PushNotificationManager Events.
                subscribeToPushManagerEvents();
            }
        }
        /// <summary>
        /// Füllt die Seite mit Inhalt auf, der bei der Navigation übergeben wird.  Gespeicherte Zustände werden ebenfalls
        /// bereitgestellt, wenn eine Seite aus einer vorherigen Sitzung neu erstellt wird.
        /// </summary>
        /// <param name="sender">
        /// Die Quelle des Ereignisses, normalerweise <see cref="NavigationHelper"/>
        /// </param>
        /// <param name="e">Ereignisdaten, die die Navigationsparameter bereitstellen, die an
        /// <see cref="Frame.Navigate(Type, Object)"/> als diese Seite ursprünglich angefordert wurde und
        /// ein Wörterbuch des Zustands, der von dieser Seite während einer früheren
        /// beibehalten wurde.  Der Zustand ist beim ersten Aufrufen einer Seite NULL.</param>
        private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
        {
            Debug.WriteLine("Homescreen: In LoadState.");

            // Erforderlich wegen Caching. Falls Seite aus Cache geladen wird und Drawer war offen
            // bleibt er sonst offen.
            if (DrawerLayout.IsDrawerOpen)
            {
                DrawerLayout.CloseDrawer();
            }

            // Registriere für Homescreen View relevante Events des PushNotificationManagers.
            subscribeToPushManagerEvents();

            // Lade "Meine Kanäle"
            await homescreenViewModel.LoadMyChannelsAsync();

            // Lade "Meine Gruppen"
            await homescreenViewModel.LoadMyGroupsAsync();
        }