This commit is contained in:
Anton Volkov
2019-03-27 10:01:10 +03:00
parent 777bfa1358
commit 5a2c132318
14 changed files with 120 additions and 99 deletions
+16 -16
View File
@@ -20,20 +20,23 @@ namespace JiraTimeBot.Ui
protected override void OnStartup(StartupEventArgs e) protected override void OnStartup(StartupEventArgs e)
{ {
var builder = new ContainerBuilder(); var builder = new ContainerBuilder();
builder.Register(c => new MainWindow())
.SingleInstance();
builder.Register(c => new ApplicationModel()).SingleInstance(); builder.Register<MainWindow>(c =>
builder.Register(c => new SettingsViewModel()).SingleInstance(); {
var result = new MainWindow();
result.DataContext = c.Resolve<ApplicationViewModel>();
return result;
}).SingleInstance();
builder.RegisterType<SettingsPage>().SingleInstance(); builder.RegisterType<ApplicationModel>().SingleInstance();
builder.RegisterType<MainPage>().SingleInstance();
builder.RegisterType<MainViewModel>().SingleInstance(); builder.RegisterType<ApplicationViewModel>().SingleInstance();
builder.RegisterType<MainPageViewModel>().SingleInstance();
builder.RegisterType<SettingsViewModel>().SingleInstance(); builder.RegisterType<SettingsViewModel>().SingleInstance();
builder.RegisterType<MainPage>().SingleInstance();
builder.RegisterAggregateService<IRegisteredPages>(); builder.RegisterType<SettingsPage>().SingleInstance();
builder.RegisterAggregateService<IRegisteredViewModels>(); builder.RegisterAggregateService<IRegisteredViewModels>();
builder.RegisterType<ApplicationNavigator>() builder.RegisterType<ApplicationNavigator>()
@@ -43,13 +46,10 @@ namespace JiraTimeBot.Ui
_container = builder.Build(); _container = builder.Build();
var mainWindow = _container.Resolve<MainWindow>(); var mainWindow = _container.Resolve<MainWindow>();
var nav = _container.Resolve<IApplicationNavigator>(); var nav = _container.Resolve<IApplicationNavigator>();
nav.NavigateToMain();
nav.NavigateToSettings();
//var mainPage = _container.Resolve<MainPage>(); mainWindow.Show();
//mainWindow.Navigate(mainPage);
mainWindow.ShowDialog();
base.OnStartup(e); base.OnStartup(e);
} }
} }
+6 -11
View File
@@ -4,35 +4,30 @@ namespace JiraTimeBot.Ui
{ {
public interface IRegisteredViewModels public interface IRegisteredViewModels
{ {
MainViewModel Main { get; set; }
SettingsViewModel Settings { get; set; } SettingsViewModel Settings { get; set; }
MainPageViewModel MainPage { get; set; }
} }
public class ApplicationNavigator : IApplicationNavigator public class ApplicationNavigator : IApplicationNavigator
{ {
private readonly MainWindow _mainWindow; private readonly ApplicationViewModel _applicationViewModel;
private readonly IRegisteredPages _pages;
private readonly IRegisteredViewModels _viewModels; private readonly IRegisteredViewModels _viewModels;
public ApplicationNavigator(MainWindow mainWindow, public ApplicationNavigator(ApplicationViewModel applicationViewModel,
IRegisteredPages pages,
IRegisteredViewModels viewModels) IRegisteredViewModels viewModels)
{ {
_mainWindow = mainWindow; _applicationViewModel = applicationViewModel;
_pages = pages;
_viewModels = viewModels; _viewModels = viewModels;
} }
public void NavigateToMain() public void NavigateToMain()
{ {
_pages.Main.DataContext = _viewModels.Main; _applicationViewModel.CurrentViewModel = _viewModels.MainPage;
_mainWindow.Navigate(_pages.Main);
} }
public void NavigateToSettings() public void NavigateToSettings()
{ {
_pages.Settings.DataContext = _viewModels.Settings; _applicationViewModel.CurrentViewModel = _viewModels.Settings;
_mainWindow.Navigate(_pages.Settings);
} }
} }
} }
-9
View File
@@ -1,9 +0,0 @@
namespace JiraTimeBot.Ui
{
public interface IRegisteredPages
{
SettingsPage Settings { get; set; }
MainPage Main { get; set; }
}
}
+2 -2
View File
@@ -96,10 +96,10 @@
<Compile Include="Commands\RelayCommand.cs" /> <Compile Include="Commands\RelayCommand.cs" />
<Compile Include="Commands\RelayCommandAsync%27.cs" /> <Compile Include="Commands\RelayCommandAsync%27.cs" />
<Compile Include="IApplicationNavigator.cs" /> <Compile Include="IApplicationNavigator.cs" />
<Compile Include="IRegisteredPages.cs" />
<Compile Include="Models\ApplicationModel.cs" /> <Compile Include="Models\ApplicationModel.cs" />
<Compile Include="Properties\Annotations.cs" /> <Compile Include="Properties\Annotations.cs" />
<Compile Include="ViewModels\MainViewModel.cs" /> <Compile Include="ViewModels\ApplicationViewModel.cs" />
<Compile Include="ViewModels\MainPageViewModel.cs" />
<Compile Include="ViewModels\SettingsViewModel.cs" /> <Compile Include="ViewModels\SettingsViewModel.cs" />
<Compile Include="ViewModels\ViewModelBase.cs" /> <Compile Include="ViewModels\ViewModelBase.cs" />
<Compile Include="Views\MainPage.xaml.cs"> <Compile Include="Views\MainPage.xaml.cs">
@@ -0,0 +1,40 @@
using Aeroclub.CL.ASIA.Application.UI.Wpf.Commands;
using System;
namespace JiraTimeBot.Ui.ViewModels
{
public class ApplicationViewModel : ViewModelBase
{
private readonly Func<IApplicationNavigator> _appNavigator;
private ViewModelBase _currentViewModel;
public ApplicationViewModel(Func<IApplicationNavigator> appNavigator)
{
_appNavigator = appNavigator;
NavigateToSettings = new RelayCommand(() =>
{
_appNavigator().NavigateToSettings();
});
NavigateToMain = new RelayCommand(() =>
{
_appNavigator().NavigateToMain();
});
}
public ViewModelBase CurrentViewModel
{
get => _currentViewModel;
set
{
_currentViewModel = value;
OnPropertyChanged();
}
}
public RelayCommand NavigateToSettings { get; set; }
public RelayCommand NavigateToMain { get; set; }
}
}
@@ -0,0 +1,7 @@
namespace JiraTimeBot.Ui.ViewModels
{
public class MainPageViewModel : ViewModelBase
{
}
}
@@ -1,22 +0,0 @@
using Aeroclub.CL.ASIA.Application.UI.Wpf.Commands;
using System;
namespace JiraTimeBot.Ui.ViewModels
{
public class MainViewModel : ViewModelBase
{
private readonly Func<IApplicationNavigator> _appNavigator;
public MainViewModel(Func<IApplicationNavigator> appNavigator)
{
_appNavigator = appNavigator;
NavigateToSettings = new RelayCommand(() =>
{
_appNavigator().NavigateToSettings();
});
}
public RelayCommand NavigateToSettings { get; set; }
}
}
+6 -8
View File
@@ -1,4 +1,4 @@
<Page x:Class="JiraTimeBot.Ui.MainPage" <UserControl x:Class="JiraTimeBot.Ui.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
@@ -6,16 +6,14 @@
xmlns:local="clr-namespace:JiraTimeBot.Ui" xmlns:local="clr-namespace:JiraTimeBot.Ui"
xmlns:viewModels="clr-namespace:JiraTimeBot.Ui.ViewModels" xmlns:viewModels="clr-namespace:JiraTimeBot.Ui.ViewModels"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" Height="100"
d:DataContext="{d:DesignInstance viewModels:MainViewModel}" Width="400"
Title="MainPage"> d:DataContext="{d:DesignInstance viewModels:MainPageViewModel}" >
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition/> <RowDefinition/>
<RowDefinition/> <RowDefinition/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Text="Main"></TextBlock> <TextBlock Text="Application"></TextBlock>
<Button Grid.Row="1" Command="{Binding Path=NavigateToSettings}" Content="NavToSettings" />
</Grid> </Grid>
</Page> </UserControl>
+2 -17
View File
@@ -1,24 +1,9 @@
using System; namespace JiraTimeBot.Ui
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace JiraTimeBot.Ui
{ {
/// <summary> /// <summary>
/// Interaction logic for MainPage.xaml /// Interaction logic for MainPage.xaml
/// </summary> /// </summary>
public partial class MainPage : Page public partial class MainPage
{ {
public MainPage() public MainPage()
{ {
+32 -6
View File
@@ -1,11 +1,37 @@
<NavigationWindow x:Class="JiraTimeBot.Ui.MainWindow" <Window x:Class="JiraTimeBot.Ui.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:JiraTimeBot.Ui.ViewModels"
xmlns:ui="clr-namespace:JiraTimeBot.Ui"
mc:Ignorable="d" mc:Ignorable="d"
ShowsNavigationUI="False" SizeToContent="WidthAndHeight"
Height="Auto" d:DataContext="{d:DesignInstance viewModels:ApplicationViewModel}"
Width="Auto" Title="ApplicationWindow">
Title="MainWindow"> <Window.Resources>
</NavigationWindow> <DataTemplate DataType="{x:Type viewModels:MainPageViewModel}">
<ui:MainPage/>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:SettingsViewModel}">
<ui:SettingsPage/>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0"
Content="NavToMain" Command="{Binding Path=NavigateToMain}" />
<Button Grid.Row="0" Grid.Column="1"
Content="NavToSettings" Command="{Binding Path=NavigateToSettings}" />
<ContentControl Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
Content="{Binding Path=CurrentViewModel}" />
</Grid>
</Window>
@@ -5,6 +5,8 @@
/// </summary> /// </summary>
public partial class MainWindow public partial class MainWindow
{ {
public MainWindow() public MainWindow()
{ {
InitializeComponent(); InitializeComponent();
+2 -1
View File
@@ -5,7 +5,8 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:JiraTimeBot.Ui" xmlns:local="clr-namespace:JiraTimeBot.Ui"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"> Width="100"
Height="200">
<Grid> <Grid>
</Grid> </Grid>
+3 -3
View File
@@ -1,4 +1,4 @@
<Page x:Class="JiraTimeBot.Ui.SettingsPage" <UserControl x:Class="JiraTimeBot.Ui.SettingsPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
@@ -6,9 +6,9 @@
xmlns:local="clr-namespace:JiraTimeBot.Ui" xmlns:local="clr-namespace:JiraTimeBot.Ui"
mc:Ignorable="d" mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" d:DesignHeight="450" d:DesignWidth="800"
Title="SettingsPage"> >
<Grid> <Grid>
<TextBlock Text="Settings"></TextBlock> <TextBlock Text="Settings"></TextBlock>
</Grid> </Grid>
</Page> </UserControl>
@@ -1,11 +1,9 @@
using System.Windows.Controls; namespace JiraTimeBot.Ui
namespace JiraTimeBot.Ui
{ {
/// <summary> /// <summary>
/// Interaction logic for SettingsPage.xaml /// Interaction logic for SettingsPage.xaml
/// </summary> /// </summary>
public partial class SettingsPage : Page public partial class SettingsPage
{ {
public SettingsPage() public SettingsPage()
{ {