Как правильно организовать перезапуск метода из одной ViewModel в другой ViewModel
У меня есть 2 ViewModel, а так же, есть статический класс StaticDirectorySettings (к нему буду обращаться из двух ViewModel, там просто публичные поля для настройки System.Timers.Timer), когда вызывается метод SettingsDirectoryViewModel.SaveChangesCommand, то поля класса StaticDirectorySettings обновляются за счет привязки
class MainViewModel : BaseViewModel
{
private System.Timers.Timer _timer;
private ObservableDirectorySettings _settings = new ObservableDirectorySettings();
public MainViewModel()
{
//если настройки были загружены - возвращается true и начинается движуха по сканированию директории
if(_settings.LoadLastSettings() == true)
StartDirectoryScaning();
}
public void StartDirectoryScaning()
{
_timer.Start()
}
}
class SettingsDirectoryViewModel
{
#region Properties
public double Interval
{
get => StaticDirectorySettings.Interval;
set => SetProperty(ref StaticDirectorySettings.Interval, value);
}
#endregion
public Command SaveChangesCommand
{
get => new Command((_) => /*тут сохранение в бд*/);
}
}
Проблема состоит в следующем: если настроек в бд нет - то и обновляться ничего не будет. Т.е сначала надо будет создать настройки в отдельном окошке, вызвать свойство SettingsDirectoryViewModel.SaveChangesCommand, а затем перезапустить программу. Конечно, это решается добавлением "заглушки" в бд где будут просто пустые настройки, но я не вижу в этом выход.
В данный момент я решаю проблему следующим образом:
class StaticModelClass
{
public static event Action SettingUpdated;
public static void SubscribeOnUpdate(Action action)
{
SettingUpdated += action;
}
public static void SettingsUpdate()
{
SettingUpdated.Invoke();
}
}
Далее, я в конструкторе MainViewModel подписываюсь на событие StaticModelClass.SubscribeOnUpdate(this.Start), а после вызываю метод StaticModelClass.SettingsUpdate() в свойстве SettingsDirectoryViewModel.SaveChangesCommand
Нормальное ли это решение?