mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Fix setting window navigation update issue & Check view model null instead of IsInitialized flag
This commit is contained in:
parent
c591011908
commit
57dccce1bf
14 changed files with 100 additions and 15 deletions
|
|
@ -14,7 +14,7 @@ namespace Flow.Launcher.Resources.Pages
|
|||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
if (!IsInitialized)
|
||||
if (_viewModel == null)
|
||||
{
|
||||
Settings = Ioc.Default.GetRequiredService<Settings>();
|
||||
_viewModel = Ioc.Default.GetRequiredService<WelcomeViewModel>();
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace Flow.Launcher.Resources.Pages
|
|||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
if (!IsInitialized)
|
||||
if (_viewModel == null)
|
||||
{
|
||||
Settings = Ioc.Default.GetRequiredService<Settings>();
|
||||
_viewModel = Ioc.Default.GetRequiredService<WelcomeViewModel>();
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ namespace Flow.Launcher.Resources.Pages
|
|||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
if (!IsInitialized)
|
||||
if (_viewModel == null)
|
||||
{
|
||||
Settings = Ioc.Default.GetRequiredService<Settings>();
|
||||
_viewModel = Ioc.Default.GetRequiredService<WelcomeViewModel>();
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ namespace Flow.Launcher.Resources.Pages
|
|||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
if (!IsInitialized)
|
||||
if (_viewModel == null)
|
||||
{
|
||||
Settings = Ioc.Default.GetRequiredService<Settings>();
|
||||
_viewModel = Ioc.Default.GetRequiredService<WelcomeViewModel>();
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ namespace Flow.Launcher.Resources.Pages
|
|||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
if (!IsInitialized)
|
||||
if (_viewModel == null)
|
||||
{
|
||||
Settings = Ioc.Default.GetRequiredService<Settings>();
|
||||
_viewModel = Ioc.Default.GetRequiredService<WelcomeViewModel>();
|
||||
|
|
|
|||
|
|
@ -1,21 +1,27 @@
|
|||
using System.Windows.Navigation;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.SettingPages.ViewModels;
|
||||
using Flow.Launcher.ViewModel;
|
||||
|
||||
namespace Flow.Launcher.SettingPages.Views;
|
||||
|
||||
public partial class SettingsPaneAbout
|
||||
{
|
||||
private SettingsPaneAboutViewModel _viewModel = null!;
|
||||
private SettingWindowViewModel _settingViewModel = null;
|
||||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
if (!IsInitialized)
|
||||
if (_viewModel == null)
|
||||
{
|
||||
_viewModel = Ioc.Default.GetRequiredService<SettingsPaneAboutViewModel>();
|
||||
_settingViewModel = Ioc.Default.GetRequiredService<SettingWindowViewModel>();
|
||||
DataContext = _viewModel;
|
||||
InitializeComponent();
|
||||
}
|
||||
// Sometimes the navigation is not triggered by button click,
|
||||
// so we need to reset the page type
|
||||
_settingViewModel.PageType = typeof(SettingsPaneAbout);
|
||||
base.OnNavigatedTo(e);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,21 +1,27 @@
|
|||
using System.Windows.Navigation;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.SettingPages.ViewModels;
|
||||
using Flow.Launcher.ViewModel;
|
||||
|
||||
namespace Flow.Launcher.SettingPages.Views;
|
||||
|
||||
public partial class SettingsPaneGeneral
|
||||
{
|
||||
private SettingsPaneGeneralViewModel _viewModel = null!;
|
||||
private SettingWindowViewModel _settingViewModel = null;
|
||||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
if (!IsInitialized)
|
||||
if (_viewModel == null)
|
||||
{
|
||||
_viewModel = Ioc.Default.GetRequiredService<SettingsPaneGeneralViewModel>();
|
||||
_settingViewModel = Ioc.Default.GetRequiredService<SettingWindowViewModel>();
|
||||
DataContext = _viewModel;
|
||||
InitializeComponent();
|
||||
}
|
||||
// Sometimes the navigation is not triggered by button click,
|
||||
// so we need to reset the page type
|
||||
_settingViewModel.PageType = typeof(SettingsPaneGeneral);
|
||||
base.OnNavigatedTo(e);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +1,27 @@
|
|||
using System.Windows.Navigation;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.SettingPages.ViewModels;
|
||||
using Flow.Launcher.ViewModel;
|
||||
|
||||
namespace Flow.Launcher.SettingPages.Views;
|
||||
|
||||
public partial class SettingsPaneHotkey
|
||||
{
|
||||
private SettingsPaneHotkeyViewModel _viewModel = null!;
|
||||
private SettingWindowViewModel _settingViewModel = null;
|
||||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
if (!IsInitialized)
|
||||
if (_viewModel == null)
|
||||
{
|
||||
_viewModel = Ioc.Default.GetRequiredService<SettingsPaneHotkeyViewModel>();
|
||||
_settingViewModel = Ioc.Default.GetRequiredService<SettingWindowViewModel>();
|
||||
DataContext = _viewModel;
|
||||
InitializeComponent();
|
||||
}
|
||||
// Sometimes the navigation is not triggered by button click,
|
||||
// so we need to reset the page type
|
||||
_settingViewModel.PageType = typeof(SettingsPaneHotkey);
|
||||
base.OnNavigatedTo(e);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,16 +11,21 @@ namespace Flow.Launcher.SettingPages.Views;
|
|||
public partial class SettingsPanePluginStore
|
||||
{
|
||||
private SettingsPanePluginStoreViewModel _viewModel = null!;
|
||||
private SettingWindowViewModel _settingViewModel = null;
|
||||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
if (!IsInitialized)
|
||||
if (_viewModel == null)
|
||||
{
|
||||
_viewModel = Ioc.Default.GetRequiredService<SettingsPanePluginStoreViewModel>();
|
||||
_settingViewModel = Ioc.Default.GetRequiredService<SettingWindowViewModel>();
|
||||
DataContext = _viewModel;
|
||||
InitializeComponent();
|
||||
}
|
||||
_viewModel.PropertyChanged += ViewModel_PropertyChanged;
|
||||
// Sometimes the navigation is not triggered by button click,
|
||||
// so we need to reset the page type
|
||||
_settingViewModel.PageType = typeof(SettingsPanePluginStore);
|
||||
base.OnNavigatedTo(e);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,16 +11,21 @@ namespace Flow.Launcher.SettingPages.Views;
|
|||
public partial class SettingsPanePlugins
|
||||
{
|
||||
private SettingsPanePluginsViewModel _viewModel = null!;
|
||||
private SettingWindowViewModel _settingViewModel = null;
|
||||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
if (!IsInitialized)
|
||||
if (_viewModel == null)
|
||||
{
|
||||
_viewModel = Ioc.Default.GetRequiredService<SettingsPanePluginsViewModel>();
|
||||
_settingViewModel = Ioc.Default.GetRequiredService<SettingWindowViewModel>();
|
||||
DataContext = _viewModel;
|
||||
InitializeComponent();
|
||||
}
|
||||
_viewModel.PropertyChanged += ViewModel_PropertyChanged;
|
||||
// Sometimes the navigation is not triggered by button click,
|
||||
// so we need to reset the page type
|
||||
_settingViewModel.PageType = typeof(SettingsPanePlugins);
|
||||
base.OnNavigatedTo(e);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,21 +1,27 @@
|
|||
using System.Windows.Navigation;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.SettingPages.ViewModels;
|
||||
using Flow.Launcher.ViewModel;
|
||||
|
||||
namespace Flow.Launcher.SettingPages.Views;
|
||||
|
||||
public partial class SettingsPaneProxy
|
||||
{
|
||||
private SettingsPaneProxyViewModel _viewModel = null!;
|
||||
private SettingWindowViewModel _settingViewModel = null;
|
||||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
if (!IsInitialized)
|
||||
if (_viewModel == null)
|
||||
{
|
||||
_viewModel = Ioc.Default.GetRequiredService<SettingsPaneProxyViewModel>();
|
||||
_settingViewModel = Ioc.Default.GetRequiredService<SettingWindowViewModel>();
|
||||
DataContext = _viewModel;
|
||||
InitializeComponent();
|
||||
}
|
||||
// Sometimes the navigation is not triggered by button click,
|
||||
// so we need to reset the page type
|
||||
_settingViewModel.PageType = typeof(SettingsPaneProxy);
|
||||
base.OnNavigatedTo(e);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +1,27 @@
|
|||
using System.Windows.Navigation;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.SettingPages.ViewModels;
|
||||
using Flow.Launcher.ViewModel;
|
||||
|
||||
namespace Flow.Launcher.SettingPages.Views;
|
||||
|
||||
public partial class SettingsPaneTheme
|
||||
{
|
||||
private SettingsPaneThemeViewModel _viewModel = null!;
|
||||
private SettingWindowViewModel _settingViewModel = null;
|
||||
|
||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||
{
|
||||
if (!IsInitialized)
|
||||
if (_viewModel == null)
|
||||
{
|
||||
_viewModel = Ioc.Default.GetRequiredService<SettingsPaneThemeViewModel>();
|
||||
_settingViewModel = Ioc.Default.GetRequiredService<SettingWindowViewModel>();
|
||||
DataContext = _viewModel;
|
||||
InitializeComponent();
|
||||
}
|
||||
// Sometimes the navigation is not triggered by button click,
|
||||
// so we need to reset the page type
|
||||
_settingViewModel.PageType = typeof(SettingsPaneTheme);
|
||||
base.OnNavigatedTo(e);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
|
|
@ -18,6 +19,7 @@ public partial class SettingWindow
|
|||
#region Private Fields
|
||||
|
||||
private readonly Settings _settings;
|
||||
private readonly SettingWindowViewModel _viewModel;
|
||||
|
||||
#endregion
|
||||
|
||||
|
|
@ -26,8 +28,8 @@ public partial class SettingWindow
|
|||
public SettingWindow()
|
||||
{
|
||||
_settings = Ioc.Default.GetRequiredService<Settings>();
|
||||
var viewModel = Ioc.Default.GetRequiredService<SettingWindowViewModel>();
|
||||
DataContext = viewModel;
|
||||
_viewModel = Ioc.Default.GetRequiredService<SettingWindowViewModel>();
|
||||
DataContext = _viewModel;
|
||||
InitializeComponent();
|
||||
|
||||
UpdatePositionAndState();
|
||||
|
|
@ -48,10 +50,37 @@ public partial class SettingWindow
|
|||
hwndTarget.RenderMode = RenderMode.SoftwareOnly; // Must use software only render mode here
|
||||
|
||||
UpdatePositionAndState();
|
||||
|
||||
_viewModel.PropertyChanged += ViewModel_PropertyChanged;
|
||||
}
|
||||
|
||||
// Sometimes the navigation is not triggered by button click,
|
||||
// so we need to update the selected item here
|
||||
private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
switch (e.PropertyName)
|
||||
{
|
||||
case nameof(SettingWindowViewModel.PageType):
|
||||
var selectedIndex = _viewModel.PageType.Name switch
|
||||
{
|
||||
nameof(SettingsPaneGeneral) => 0,
|
||||
nameof(SettingsPanePlugins) => 1,
|
||||
nameof(SettingsPanePluginStore) => 2,
|
||||
nameof(SettingsPaneTheme) => 3,
|
||||
nameof(SettingsPaneHotkey) => 4,
|
||||
nameof(SettingsPaneProxy) => 5,
|
||||
nameof(SettingsPaneAbout) => 6,
|
||||
_ => 0
|
||||
};
|
||||
NavView.SelectedItem = NavView.MenuItems[selectedIndex];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnClosed(object sender, EventArgs e)
|
||||
{
|
||||
_viewModel.PropertyChanged -= ViewModel_PropertyChanged;
|
||||
|
||||
// If app is exiting, settings save is not needed because main window closing event will handle this
|
||||
if (App.Exiting) return;
|
||||
// Save settings when window is closed
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
using System;
|
||||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
using Flow.Launcher.Plugin;
|
||||
using Flow.Launcher.SettingPages.Views;
|
||||
|
||||
namespace Flow.Launcher.ViewModel;
|
||||
|
||||
|
|
@ -12,6 +14,20 @@ public partial class SettingWindowViewModel : BaseModel
|
|||
_settings = settings;
|
||||
}
|
||||
|
||||
private Type _pageType = typeof(SettingsPaneGeneral);
|
||||
public Type PageType
|
||||
{
|
||||
get => _pageType;
|
||||
set
|
||||
{
|
||||
if (_pageType != value)
|
||||
{
|
||||
_pageType = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public double SettingWindowWidth
|
||||
{
|
||||
get => _settings.SettingWindowWidth;
|
||||
|
|
|
|||
Loading…
Reference in a new issue