diff --git a/src/JiraTimeBot.Ui/App.xaml.cs b/src/JiraTimeBot.Ui/App.xaml.cs index b08f11b..7a307cf 100644 --- a/src/JiraTimeBot.Ui/App.xaml.cs +++ b/src/JiraTimeBot.Ui/App.xaml.cs @@ -1,7 +1,4 @@ using Autofac; -using Autofac.Extras.AggregateService; -using JiraTimeBot.Ui.Models; -using JiraTimeBot.Ui.ViewModels; using JiraTimeBot.UI.Tray; using System; using System.Threading; @@ -22,6 +19,8 @@ namespace JiraTimeBot.Ui { if (Mutex.WaitOne(TimeSpan.Zero, true)) { + Bootstrapper bootstrapper = new Bootstrapper(); + _container = bootstrapper.Build(); Mutex.ReleaseMutex(); } else @@ -34,32 +33,6 @@ namespace JiraTimeBot.Ui protected override void OnStartup(StartupEventArgs e) { - var builder = new ContainerBuilder(); - - builder.Register(c => - { - var result = new MainWindow(); - result.DataContext = c.Resolve(); - return result; - }).SingleInstance(); - - builder.RegisterType().SingleInstance(); - - builder.RegisterType().SingleInstance(); - builder.RegisterType().SingleInstance(); - builder.RegisterType().SingleInstance(); - - builder.RegisterType().SingleInstance(); - builder.RegisterType().SingleInstance(); - - builder.RegisterAggregateService(); - - builder.RegisterType() - .As() - .SingleInstance(); - - _container = builder.Build(); - var mainWindow = _container.Resolve(); var nav = _container.Resolve(); diff --git a/src/JiraTimeBot.Ui/Bootstrapper.cs b/src/JiraTimeBot.Ui/Bootstrapper.cs new file mode 100644 index 0000000..8ec15a3 --- /dev/null +++ b/src/JiraTimeBot.Ui/Bootstrapper.cs @@ -0,0 +1,43 @@ +using Autofac; +using Autofac.Extras.AggregateService; +using JiraTimeBot.Ui.Models; +using JiraTimeBot.Ui.ViewModels; + +namespace JiraTimeBot.Ui +{ + public class Bootstrapper + { + public IContainer Build() + { + var builder = new ContainerBuilder(); + + builder.Register(c => + { + var result = new MainWindow(); + result.DataContext = c.Resolve(); + return result; + }).SingleInstance(); + + builder.RegisterType().SingleInstance(); + builder.RegisterType().SingleInstance(); + builder.RegisterType().SingleInstance(); + + builder.RegisterType().SingleInstance(); + builder.RegisterType().SingleInstance(); + builder.RegisterType().SingleInstance(); + + builder.RegisterType().SingleInstance(); + builder.RegisterType().SingleInstance(); + + builder.RegisterAggregateService(); + + builder.RegisterType() + .As() + .SingleInstance(); + + var container = builder.Build(); + + return container; + } + } +} \ No newline at end of file diff --git a/src/JiraTimeBot.Ui/JiraTimeBot.Ui.csproj b/src/JiraTimeBot.Ui/JiraTimeBot.Ui.csproj index 5233891..1f96a78 100644 --- a/src/JiraTimeBot.Ui/JiraTimeBot.Ui.csproj +++ b/src/JiraTimeBot.Ui/JiraTimeBot.Ui.csproj @@ -96,6 +96,10 @@ MSBuild:Compile Designer + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -109,11 +113,15 @@ Code + + + + diff --git a/src/JiraTimeBot.Ui/Models/ApplicationModel.cs b/src/JiraTimeBot.Ui/Models/ApplicationModel.cs index 771cd94..dc77b1f 100644 --- a/src/JiraTimeBot.Ui/Models/ApplicationModel.cs +++ b/src/JiraTimeBot.Ui/Models/ApplicationModel.cs @@ -1,6 +1,6 @@ namespace JiraTimeBot.Ui.Models { - public class ApplicationModel + public class ApplicationModel : IModel { } diff --git a/src/JiraTimeBot.Ui/Models/IModel.cs b/src/JiraTimeBot.Ui/Models/IModel.cs new file mode 100644 index 0000000..bd6bc4e --- /dev/null +++ b/src/JiraTimeBot.Ui/Models/IModel.cs @@ -0,0 +1,27 @@ +using JiraTimeBot.Ui.Annotations; +using System.ComponentModel; +using System.Runtime.CompilerServices; + +namespace JiraTimeBot.Ui.Models +{ + public interface IModel + { + + } + + public interface INotifyModel : IModel, INotifyPropertyChanged + { + + } + + public abstract class NotifyModelBase : INotifyModel + { + public event PropertyChangedEventHandler PropertyChanged; + + [NotifyPropertyChangedInvocator] + protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} \ No newline at end of file diff --git a/src/JiraTimeBot.Ui/Models/MainModel.cs b/src/JiraTimeBot.Ui/Models/MainModel.cs new file mode 100644 index 0000000..e8b7122 --- /dev/null +++ b/src/JiraTimeBot.Ui/Models/MainModel.cs @@ -0,0 +1,7 @@ +namespace JiraTimeBot.Ui.Models +{ + public class MainModel : IModel + { + + } +} \ No newline at end of file diff --git a/src/JiraTimeBot.Ui/Models/SettingsModel.cs b/src/JiraTimeBot.Ui/Models/SettingsModel.cs new file mode 100644 index 0000000..dccec84 --- /dev/null +++ b/src/JiraTimeBot.Ui/Models/SettingsModel.cs @@ -0,0 +1,7 @@ +namespace JiraTimeBot.Ui.Models +{ + public class SettingsModel : IModel + { + + } +} \ No newline at end of file diff --git a/src/JiraTimeBot.Ui/Styles.xaml b/src/JiraTimeBot.Ui/Styles.xaml new file mode 100644 index 0000000..000e946 --- /dev/null +++ b/src/JiraTimeBot.Ui/Styles.xaml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/JiraTimeBot.Ui/ViewModels/ApplicationViewModel.cs b/src/JiraTimeBot.Ui/ViewModels/ApplicationViewModel.cs index df71410..f9d4089 100644 --- a/src/JiraTimeBot.Ui/ViewModels/ApplicationViewModel.cs +++ b/src/JiraTimeBot.Ui/ViewModels/ApplicationViewModel.cs @@ -1,26 +1,16 @@ -using Aeroclub.CL.ASIA.Application.UI.Wpf.Commands; +using JiraTimeBot.Ui.Models; using System; namespace JiraTimeBot.Ui.ViewModels { - public class ApplicationViewModel : ViewModelBase + public class ApplicationViewModel : ViewModelBase { private readonly Func _appNavigator; + private ViewModelBase _currentViewModel; - public ApplicationViewModel(Func appNavigator) + public ApplicationViewModel(ApplicationModel model) : base(model) { - _appNavigator = appNavigator; - - NavigateToSettings = new RelayCommand(() => - { - _appNavigator().NavigateToSettings(); - }); - - NavigateToMain = new RelayCommand(() => - { - _appNavigator().NavigateToMain(); - }); } public ViewModelBase CurrentViewModel @@ -32,9 +22,5 @@ namespace JiraTimeBot.Ui.ViewModels OnPropertyChanged(); } } - - public RelayCommand NavigateToSettings { get; set; } - - public RelayCommand NavigateToMain { get; set; } } } \ No newline at end of file diff --git a/src/JiraTimeBot.Ui/ViewModels/MainPageViewModel.cs b/src/JiraTimeBot.Ui/ViewModels/MainPageViewModel.cs index e89dcaf..8377e6f 100644 --- a/src/JiraTimeBot.Ui/ViewModels/MainPageViewModel.cs +++ b/src/JiraTimeBot.Ui/ViewModels/MainPageViewModel.cs @@ -1,7 +1,24 @@ -namespace JiraTimeBot.Ui.ViewModels +using Aeroclub.CL.ASIA.Application.UI.Wpf.Commands; +using JiraTimeBot.Ui.Models; +using System; + +namespace JiraTimeBot.Ui.ViewModels { - public class MainPageViewModel : ViewModelBase + public class MainPageViewModel : ViewModelBase { - + private readonly Func _navigator; + + public MainPageViewModel(MainModel model, Func navigator) : base(model) + { + _navigator = navigator; + OpenSettingsCommand = new RelayCommand(NavigateToSettings); + } + + public RelayCommand OpenSettingsCommand { get; set; } + + private void NavigateToSettings() + { + _navigator().NavigateToSettings(); + } } } \ No newline at end of file diff --git a/src/JiraTimeBot.Ui/ViewModels/SettingsViewModel.cs b/src/JiraTimeBot.Ui/ViewModels/SettingsViewModel.cs index 5ed52bc..e239fdf 100644 --- a/src/JiraTimeBot.Ui/ViewModels/SettingsViewModel.cs +++ b/src/JiraTimeBot.Ui/ViewModels/SettingsViewModel.cs @@ -1,7 +1,25 @@ -namespace JiraTimeBot.Ui.ViewModels +using Aeroclub.CL.ASIA.Application.UI.Wpf.Commands; +using JiraTimeBot.Ui.Models; +using System; + +namespace JiraTimeBot.Ui.ViewModels { - public class SettingsViewModel : ViewModelBase + public class SettingsViewModel : ViewModelBase { - + private readonly Func _navigator; + + public SettingsViewModel(SettingsModel model, Func navigator) : base(model) + { + _navigator = navigator; + SaveSettingsCommand = new RelayCommand(SaveSettings); + } + + public RelayCommand SaveSettingsCommand { get; set; } + + private void SaveSettings() + { + //TODO: SaveSettingsHere + _navigator().NavigateToMain(); + } } } \ No newline at end of file diff --git a/src/JiraTimeBot.Ui/ViewModels/ViewModelBase.cs b/src/JiraTimeBot.Ui/ViewModels/ViewModelBase.cs index 03dd1c5..ce83aa4 100644 --- a/src/JiraTimeBot.Ui/ViewModels/ViewModelBase.cs +++ b/src/JiraTimeBot.Ui/ViewModels/ViewModelBase.cs @@ -1,10 +1,11 @@ using JiraTimeBot.Ui.Annotations; +using JiraTimeBot.Ui.Models; using System.ComponentModel; using System.Runtime.CompilerServices; namespace JiraTimeBot.Ui.ViewModels { - public class ViewModelBase : INotifyPropertyChanged + public abstract class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; @@ -14,4 +15,14 @@ namespace JiraTimeBot.Ui.ViewModels PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } + + public abstract class ViewModelBase : ViewModelBase where T : IModel + { + protected T Model { get; } + + protected ViewModelBase(T model) + { + Model = model; + } + } } \ No newline at end of file diff --git a/src/JiraTimeBot.Ui/Views/MainPage.xaml b/src/JiraTimeBot.Ui/Views/MainPage.xaml index 4f61e97..983a2fd 100644 --- a/src/JiraTimeBot.Ui/Views/MainPage.xaml +++ b/src/JiraTimeBot.Ui/Views/MainPage.xaml @@ -6,15 +6,42 @@ xmlns:local="clr-namespace:JiraTimeBot.Ui" xmlns:viewModels="clr-namespace:JiraTimeBot.Ui.ViewModels" mc:Ignorable="d" - Height="100" - Width="400" d:DataContext="{d:DesignInstance viewModels:MainPageViewModel}" > - - - - - - - + + + + + + + + + + + + + + + + + + + Тестовый прогон +