Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 48 additions & 6 deletions AIDevGallery/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,23 @@ public void NavigateToPage(object? obj)
{
NavigateToApiOrModelPage(modelTypes[0]);
}
else if (obj is ModelDetails)
{
Navigate("Models", obj);
else if (obj is ModelDetails modelDetails)
{
// ModelDetails only contains an Id, not a direct ModelType reference.
// We need to look up the ModelType to determine if this should route to:
// - APISelectionPage (for WCRAPIs and children)
// - ModelSelectionPage (for all other models)
// This enables intelligent routing from search results and external navigation.
var modelTypeList = App.FindSampleItemById(modelDetails.Id);
if (modelTypeList.Count > 0)
{
NavigateToApiOrModelPage(modelTypeList[0]);
}
else
{
// Fallback: If ID lookup fails (e.g., user-added models), default to Models page
Navigate("Models", obj);
}
}
else if (obj is SampleNavigationArgs)
{
Expand Down Expand Up @@ -198,8 +212,36 @@ private void Navigate(Type page, object? param = null)

if (page == typeof(APISelectionPage) && NavFrame.Content is APISelectionPage apiPage && param != null)
{
// No need to navigate to the APISelectionPage again, we just want to navigate to the right subpage
apiPage.SetSelectedApiInMenu((ModelType)param);
// Optimize: Avoid re-navigating if already on APISelectionPage
// Just update the selected item in the navigation menu
if (param is ModelType modelType)
{
apiPage.SetSelectedApiInMenu(modelType);
}
else
{
// ModelDetails needs full navigation as APISelectionPage.OnNavigatedTo handles the lookup
// Unknown parameter type - perform full navigation to be safe
NavFrame.Navigate(page, param);
}
}
else if (page == typeof(ModelSelectionPage) && NavFrame.Content is ModelSelectionPage modelPage && param != null)
{
// Optimize: Avoid re-navigating if already on ModelSelectionPage
// Use the same pattern as APISelectionPage
if (param is ModelType modelType)
{
modelPage.SetSelectedModelInMenu(modelType);
}
else if (param is List<ModelType> modelTypes && modelTypes.Count > 0)
{
modelPage.SetSelectedModelInMenu(modelTypes[0]);
}
else
{
// For other parameter types (ModelDetails, string, MRU), perform full navigation
NavFrame.Navigate(page, param);
}
}
else if (page == typeof(ScenarioSelectionPage) && NavFrame.Content is ScenarioSelectionPage scenarioPage && param != null)
{
Expand Down Expand Up @@ -258,7 +300,7 @@ public void Navigate(SearchResult result)
}
else if (result.Tag is ModelType modelType)
{
Navigate("models", modelType);
NavigateToApiOrModelPage(modelType);
}
}

Expand Down
2 changes: 1 addition & 1 deletion AIDevGallery/Pages/APIs/APIOverview.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ private void APIViewer_ItemInvoked(ItemsView sender, ItemsViewItemInvokedEventAr
{
if (apiDefinition == api)
{
App.MainWindow.Navigate("apis", item);
App.MainWindow.NavigateToPage(item);
}
}
}
Expand Down
13 changes: 13 additions & 0 deletions AIDevGallery/Pages/Models/ModelSelectionPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,19 @@ private void NavView_SelectionChanged(NavigationView sender, NavigationViewSelec
}
}

/// <summary>
/// Public method to update the selected model in the navigation menu without re-navigating.
/// This mirrors the behavior of APISelectionPage.SetSelectedApiInMenu for consistency.
/// </summary>
public void SetSelectedModelInMenu(ModelType selectedType)
{
var modelTypes = new List<ModelType> { selectedType };
foreach (NavigationViewItem item in NavView.MenuItems)
{
SetSelectedSampleInMenu(item, modelTypes, null);
}
}

private void SetSelectedSampleInMenu(NavigationViewItem item, List<ModelType>? selectedSample = null, ModelDetails? details = null)
{
if (selectedSample == null && details == null)
Expand Down