Skip to content

Instantly share code, notes, and snippets.

@mrtank
Last active October 4, 2019 10:30
Show Gist options
  • Save mrtank/98acb332e7042a12a9534405eae3989e to your computer and use it in GitHub Desktop.
Save mrtank/98acb332e7042a12a9534405eae3989e to your computer and use it in GitHub Desktop.
public static class IocKernel
{
private static StandardKernel _kernel;
private static int _sendingChainDepth;
private static FormBase _latestViewModel;
public static void SendTo<T>() where T: FormBase
{
if (_kernel == null)
return;
_sendingChainDepth++;
T newViewModel = _kernel.Get<T>();
if (_latestViewModel == null)
_latestViewModel = newViewModel;
_sendingChainDepth--;
if (_sendingChainDepth != 0)
return;
Messenger.Default.Send(new SetMainViewModel { ViewModel = _latestViewModel });
_latestViewModel = null;
}
...
namespace ThickClient.MainWindow
{
using DevExpress.Mvvm;
using PropertyChanged;
using OnlineService.Login;
using FirstInit;
using Messages;
[ImplementPropertyChanged]
public class MainWindowViewModel: ViewModelBase
{
public FormBase CurrentPageViewModel { get; set; }
public MainWindowViewModel()
{
if (IsInDesignMode)
{
LoginViewModelDTO dto = new LoginViewModelDTO
{
DialogProvider = null,
OnlineServiceProvider = null,
DataModelsProvider = null
};
CurrentPageViewModel = new LoginViewModel(dto);
}
Messenger.Default.Register<SetMainViewModel>(this, SetViewModel);
IocKernel.SendTo<FirstInitViewModel>();
}
private void SetViewModel(SetMainViewModel viewModel)
{
CurrentPageViewModel?.Free?.Invoke();
CurrentPageViewModel = viewModel.ViewModel;
viewModel.ViewModel.Init?.Invoke();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment