public override void OnApplyTemplate()
    {
        if (MapDetailsControl != null)
        {
            MapDetailsControl.MapDetailsChanged -= RaiseMapDetailsChanged;
            MapDetailsControl.MapSelectedForOpening -= RaiseMapSelectedForOpening;
        }

        if (ResultsListBox != null)
            ResultsListBox.SelectionChanged -= ResultListBox_SelectionChanged;

        base.OnApplyTemplate();

        MapDetailsControl = GetTemplateChild("MapDetailsControl") as MapDetailsControl;
        ResultsListBox = GetTemplateChild("ResultsListBox") as ListBox;
        SearchResultsTextBlock = GetTemplateChild("SearchResultsTextBlock") as TextBlock;
        DataPager = GetTemplateChild("DataPager") as DataPager;

        if (MapDetailsControl != null)
        {
            MapDetailsControl.MapDetailsChanged += RaiseMapDetailsChanged;
            MapDetailsControl.MapSelectedForOpening += RaiseMapSelectedForOpening;
        }

        if (ResultsListBox != null)
        {
            ResultsListBox.SelectionChanged += ResultListBox_SelectionChanged;
            ResultsListBox.DataContext = this;
        }
        if (_isDirty)
            GenerateResults();
    }
        public override void OnApplyTemplate()
        {
            if (ResultsListBox != null)
                ResultsListBox.SelectionChanged -= ResultListBox_SelectionChanged;
            if (MapDetailsControl != null)
            {
                MapDetailsControl.MapDetailsChanged -= RaiseMapDetailsChanged;
                MapDetailsControl.MapSelectedForOpening -= RaiseMapSelectedForOpening;
            }
            base.OnApplyTemplate();
            MapDetailsControl = GetTemplateChild("MapDetailsControl") as MapDetailsControl;
            ResultsListBox = GetTemplateChild("ResultsListBox") as ListBox;

            if (ResultsListBox != null)
            {
                ResultsListBox.SelectionChanged += ResultListBox_SelectionChanged;
                ResultsListBox.Tag = this;
            }

            if (MapDetailsControl != null)
            {
                MapDetailsControl.MapDetailsChanged += RaiseMapDetailsChanged;
                MapDetailsControl.MapSelectedForOpening += RaiseMapSelectedForOpening;
            }
        }
        public override void OnApplyTemplate()
        {
            if (MapDetailsControl != null)
                MapDetailsControl.MapSelectedForOpening -= RaiseMapSelectedForOpening;
            if (SearchTextBox != null)
                SearchTextBox.KeyDown -= SearchTextBox_KeyDown;
            if (SearchButton != null)
                SearchButton.Click -= SearchButton_Click;
            if (MapResultsListBox != null)
                MapResultsListBox.SelectionChanged -= ResultListBox_SelectionChanged;
            if (SearchMapsButton != null)
                SearchMapsButton.Click -= SearchMapsButton_Click;
            if (SearchGroupsButton != null)
                SearchGroupsButton.Click -= SearchGroupsButton_Click;
            if (MostRelevant != null)
                MostRelevant.Click -= SortByMenuToggleButton_Click;
            if (MostPopular != null)
                MostPopular.Click -= SortByMenuToggleButton_Click;
            if (HighestRated != null)
                HighestRated.Click -= SortByMenuToggleButton_Click;
            if (MostRecentlyAdded != null)
                MostRecentlyAdded.Click -= SortByMenuToggleButton_Click;
            if (TitleAtoZ != null)
                TitleAtoZ.Click -= SortByMenuToggleButton_Click;
            if (TitleZtoA != null)
                TitleZtoA.Click -= SortByMenuToggleButton_Click;
            if (MostComments != null)
                MostComments.Click -= SortByMenuToggleButton_Click;
            if (SortByToggleButton != null)
                SortByToggleButton.Click -= SortByToggleButton_Click;
            if (SortByMenuPopup != null)
                SortByMenuPopup.Closed -= SortByMenuPopup_Closed;
            if (SortByToggleButtonStackPanel != null)
                SortByToggleButtonStackPanel.LostFocus -= SortByToggleButtonStackPanel_LostFocus;

            base.OnApplyTemplate();

            MapDetailsControl = GetTemplateChild("MapDetailsControl") as MapDetailsControl;
            SearchTextBox = GetTemplateChild("SearchTextBox") as TextBox;
            SearchMapsButton = GetTemplateChild("SearchMapsButton") as RadioButton;
            SearchButton = GetTemplateChild("SearchButton") as Button;
            ProgressIndicator = GetTemplateChild("ProgressIndicator") as ProgressIndicator;
            DataPager = GetTemplateChild("DataPager") as DataPager;
            GroupResultsListBox = GetTemplateChild("GroupResultsListBox") as ListBox;
            SearchResultsTextBlock = GetTemplateChild("SearchResultsTextBlock") as TextBlock;
            MapResultsListBox = GetTemplateChild("MapResultsListBox") as ListBox;
            SearchResultsHeaderCanvas = GetTemplateChild("SearchResultsHeaderCanvas") as Canvas;
            SortByToggleButton = GetTemplateChild("SortByToggleButton") as ToggleButton;
            SortByMenuPopup = GetTemplateChild("SortByMenuPopup") as Popup;
            SortByMenuBorder = GetTemplateChild("SortByMenuBorder") as Border;
            SortByToggleButtonStackPanel = GetTemplateChild("SortByToggleButtonStackPanel") as StackPanel;
            SearchGroupsButton = GetTemplateChild("SearchGroupsButton") as RadioButton;
            MostRelevant = GetTemplateChild("MostRelevant") as ToggleButton;
            MostPopular = GetTemplateChild("MostPopular") as ToggleButton;
            HighestRated = GetTemplateChild("HighestRated") as ToggleButton;
            MostRecentlyAdded = GetTemplateChild("MostRecentlyAdded") as ToggleButton;
            TitleAtoZ = GetTemplateChild("TitleAtoZ") as ToggleButton;
            TitleZtoA = GetTemplateChild("TitleZtoA") as ToggleButton;
            MostComments = GetTemplateChild("MostComments") as ToggleButton;

            if (MapDetailsControl != null)
                MapDetailsControl.MapSelectedForOpening += RaiseMapSelectedForOpening;
            if (SearchTextBox != null)
            {
                SearchTextBox.KeyDown += SearchTextBox_KeyDown;
                SearchTextBox.Focus();
            }
            if (SearchButton != null)
                SearchButton.Click += SearchButton_Click;
            if (MapResultsListBox != null)
            {
                MapResultsListBox.SelectionChanged += ResultListBox_SelectionChanged;
                MapResultsListBox.DataContext = this;
            }
            if (GroupResultsListBox != null)
                GroupResultsListBox.DataContext = this;
            if (SearchMapsButton != null)
                SearchMapsButton.Click += SearchMapsButton_Click;
            if (SearchGroupsButton != null)
                SearchGroupsButton.Click += SearchGroupsButton_Click;
            if (MostRelevant != null)
                MostRelevant.Click += SortByMenuToggleButton_Click;
            if (MostPopular != null)
                MostPopular.Click += SortByMenuToggleButton_Click;
            if (HighestRated != null)
                HighestRated.Click += SortByMenuToggleButton_Click;
            if (MostRecentlyAdded != null)
                MostRecentlyAdded.Click += SortByMenuToggleButton_Click;
            if (TitleAtoZ != null)
                TitleAtoZ.Click += SortByMenuToggleButton_Click;
            if (TitleZtoA != null)
                TitleZtoA.Click += SortByMenuToggleButton_Click;
            if (MostComments != null)
                MostComments.Click += SortByMenuToggleButton_Click;
            if (SortByToggleButton != null)
                SortByToggleButton.Click += SortByToggleButton_Click;
            if (SortByMenuPopup != null)
                SortByMenuPopup.Closed += SortByMenuPopup_Closed;
            if (SortByToggleButtonStackPanel != null)
                SortByToggleButtonStackPanel.LostFocus += SortByToggleButtonStackPanel_LostFocus;
            if (pendingSearch != null && SearchTextBox != null && SearchMapsButton != null)
            {
                DoSearch(pendingSearch.Term, pendingSearch.Type);
                pendingSearch = null;
            }
        }