diff --git a/DaSaSo.ViewModel/BaseViewModel.cs b/DaSaSo.ViewModel/BaseViewModel.cs index a5fb34a..72fe860 100644 --- a/DaSaSo.ViewModel/BaseViewModel.cs +++ b/DaSaSo.ViewModel/BaseViewModel.cs @@ -2,8 +2,8 @@ { public delegate TViewModel CreateViewModel() where TViewModel : BaseViewModel; public class BaseViewModel : ObservableObject - { - + { + public virtual void Dispose() { } } } diff --git a/DaSaSo.ViewModel/Commands/UpdateCurrentViewModelCommand.cs b/DaSaSo.ViewModel/Commands/UpdateCurrentViewModelCommand.cs index e189ab5..fb5ca7a 100644 --- a/DaSaSo.ViewModel/Commands/UpdateCurrentViewModelCommand.cs +++ b/DaSaSo.ViewModel/Commands/UpdateCurrentViewModelCommand.cs @@ -19,9 +19,9 @@ namespace DaSaSo.ViewModel.Commands public override async Task ExecuteAsync(object? parameter) { - if(parameter is EViewType) + if(parameter is EMainWindowViewType) { - EViewType viewType = (EViewType)parameter; + EMainWindowViewType viewType = (EMainWindowViewType)parameter; _navigator.CurrentViewModel = _viewModelFactory.CreateViewModel(viewType); } } diff --git a/DaSaSo.ViewModel/Enums/EViewType.cs b/DaSaSo.ViewModel/Enums/EMainWindowViewType.cs similarity index 88% rename from DaSaSo.ViewModel/Enums/EViewType.cs rename to DaSaSo.ViewModel/Enums/EMainWindowViewType.cs index 44f6ee9..85f4501 100644 --- a/DaSaSo.ViewModel/Enums/EViewType.cs +++ b/DaSaSo.ViewModel/Enums/EMainWindowViewType.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace DaSaSo.ViewModel.Enums { - public enum EViewType + public enum EMainWindowViewType { Home, Clients, diff --git a/DaSaSo.ViewModel/Factories/ViewModelAbstractFactory.cs b/DaSaSo.ViewModel/Factories/MainWindowViewModelFactory.cs similarity index 82% rename from DaSaSo.ViewModel/Factories/ViewModelAbstractFactory.cs rename to DaSaSo.ViewModel/Factories/MainWindowViewModelFactory.cs index 634263b..a933d79 100644 --- a/DaSaSo.ViewModel/Factories/ViewModelAbstractFactory.cs +++ b/DaSaSo.ViewModel/Factories/MainWindowViewModelFactory.cs @@ -11,7 +11,7 @@ using System.Threading.Tasks; namespace DaSaSo.ViewModel.Factories { - public class ViewModelAbstractFactory : IViewModelAbstractFactory + public class MainWindowViewModelFactory : IViewModelAbstractFactory { private CreateViewModel _createHomeViewModel; private CreateViewModel _createClientListViewModel; @@ -20,7 +20,7 @@ namespace DaSaSo.ViewModel.Factories private CreateViewModel _createBuildingsiteListViewModel; private CreateViewModel _createSewerObjectListViewModel; - public ViewModelAbstractFactory( + public MainWindowViewModelFactory( CreateViewModel createHomeViewModel, CreateViewModel createClientListViewModel, CreateViewModel createClientEditViewModel, @@ -35,22 +35,22 @@ namespace DaSaSo.ViewModel.Factories _createSewerObjectListViewModel = createSewerObjectListViewModel; } - public BaseViewModel CreateViewModel(EViewType viewType) + public BaseViewModel CreateViewModel(EMainWindowViewType viewType) { switch (viewType) { - case EViewType.Home: + case EMainWindowViewType.Home: return _createHomeViewModel(); - case EViewType.Clients: + case EMainWindowViewType.Clients: return _createClientListViewModel(); - case EViewType.ClientEdit: + case EMainWindowViewType.ClientEdit: return _createClientEditViewModel(); - case EViewType.Projects: + case EMainWindowViewType.Projects: return _createProjektListViewModel(); - case EViewType.Buildingsites: + case EMainWindowViewType.Buildingsites: return _createBuildingsiteListViewModel(); - case EViewType.SewerObjects: + case EMainWindowViewType.SewerObjects: return _createSewerObjectListViewModel(); default: diff --git a/DaSaSo.ViewModel/Interface/IActualProject.cs b/DaSaSo.ViewModel/Interface/IActualProject.cs index 01de03d..aaa03da 100644 --- a/DaSaSo.ViewModel/Interface/IActualProject.cs +++ b/DaSaSo.ViewModel/Interface/IActualProject.cs @@ -12,12 +12,17 @@ namespace DaSaSo.ViewModel.Interface event EventHandler? ClientChanged; event EventHandler? ProjectChanged; event EventHandler? BuildingSiteChanged; + event EventHandler? SewerObjectChanged; Client AktuellClient { get; } Project AktuellProjekt { get; } Buildingsite AktuellBaustelle { get; } + SewerObject AktuellSewerObject { get; } void SetClient(Client client); void SetProject(Project project); void SetBuildingSite(Buildingsite buildingsite); + void SetSewerObject(SewerObject sewerObject); + void ResetProject(); + void ResetBuildingSite(); } } diff --git a/DaSaSo.ViewModel/Interface/INavigator.cs b/DaSaSo.ViewModel/Interface/INavigator.cs index 220d3af..d17b6c6 100644 --- a/DaSaSo.ViewModel/Interface/INavigator.cs +++ b/DaSaSo.ViewModel/Interface/INavigator.cs @@ -10,6 +10,6 @@ namespace DaSaSo.ViewModel.Interface public interface INavigator { BaseViewModel CurrentViewModel { get; set; } - + event Action StateChanged; } } diff --git a/DaSaSo.ViewModel/Interface/IViewModelAbstractFactory.cs b/DaSaSo.ViewModel/Interface/IViewModelAbstractFactory.cs index d88466f..69fc65c 100644 --- a/DaSaSo.ViewModel/Interface/IViewModelAbstractFactory.cs +++ b/DaSaSo.ViewModel/Interface/IViewModelAbstractFactory.cs @@ -9,6 +9,6 @@ namespace DaSaSo.ViewModel.Interface { public interface IViewModelAbstractFactory { - BaseViewModel CreateViewModel(EViewType viewType); + BaseViewModel CreateViewModel(EMainWindowViewType viewType); } } diff --git a/DaSaSo.ViewModel/Interface/IWindowService.cs b/DaSaSo.ViewModel/Interface/IWindowService.cs new file mode 100644 index 0000000..128943d --- /dev/null +++ b/DaSaSo.ViewModel/Interface/IWindowService.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DaSaSo.ViewModel.Interface +{ + public interface IWindowService + { + void ShowWindow(object DataContext); + } +} diff --git a/DaSaSo.ViewModel/SewerObjectListViewModel.cs b/DaSaSo.ViewModel/SewerObjectListViewModel.cs index 7a685f5..0ff61a6 100644 --- a/DaSaSo.ViewModel/SewerObjectListViewModel.cs +++ b/DaSaSo.ViewModel/SewerObjectListViewModel.cs @@ -38,10 +38,11 @@ namespace DaSaSo.ViewModel { SewerObject? SelectedSewer = GetSelectedSewer(); if (SelectedSewer == null) return; + Debugger.Break(); } - private SewerObject? GetSelectedSewer() + public SewerObject? GetSelectedSewer() { SewerObject? result = null; foreach(SewerObjectsToStreet? streetcollection in SewerObjects) @@ -57,7 +58,6 @@ namespace DaSaSo.ViewModel if (result != null) break; } - return result; } diff --git a/DaSaSo.ViewModel/State/ActualState/ActualProject.cs b/DaSaSo.ViewModel/State/ActualState/ActualProject.cs index 43dc7e2..02b5f35 100644 --- a/DaSaSo.ViewModel/State/ActualState/ActualProject.cs +++ b/DaSaSo.ViewModel/State/ActualState/ActualProject.cs @@ -10,14 +10,18 @@ namespace DaSaSo.ViewModel.State.ActualState { public class ActualProject : IActualProject { - public Client AktuellClient { get; private set; } - public Buildingsite AktuellBaustelle { get; private set; } - public Project AktuellProjekt { get; private set; } + public Client? AktuellClient { get; private set; } + public Buildingsite? AktuellBaustelle { get; private set; } + public Project? AktuellProjekt { get; private set; } + public SewerObject? AktuellSewerObject { get; private set; } + #region events public event EventHandler? ClientChanged; public event EventHandler? ProjectChanged; public event EventHandler? BuildingSiteChanged; + public event EventHandler? SewerObjectChanged; + protected void OnClientChanged() { ClientChanged?.Invoke(this, new EventArgs()); @@ -48,5 +52,22 @@ namespace DaSaSo.ViewModel.State.ActualState AktuellBaustelle = buildingsite; OnBuildingSiteChanged(); } + + public void SetSewerObject(SewerObject sewerObject) + { + AktuellSewerObject = sewerObject; + + } + + public void ResetProject() + { + SetProject(null); + ResetBuildingSite(); + } + + public void ResetBuildingSite() + { + SetBuildingSite(null); + } } } diff --git a/DaSaSo.ViewModel/State/Navigation/Navigator.cs b/DaSaSo.ViewModel/State/Navigation/Navigator.cs index 53eb1e0..f0aeef2 100644 --- a/DaSaSo.ViewModel/State/Navigation/Navigator.cs +++ b/DaSaSo.ViewModel/State/Navigation/Navigator.cs @@ -15,9 +15,11 @@ namespace DaSaSo.ViewModel.State.Navigation get => _currentViewModel; set { + _currentViewModel?.Dispose(); _currentViewModel = value; - OnPropertyChanged(); + StateChanged?.Invoke(); } } + public event Action StateChanged; } } diff --git a/DaSaSo.ViewModel/Window/MainWindowViewModel.cs b/DaSaSo.ViewModel/Window/MainWindowViewModel.cs index 2f96427..f9aba24 100644 --- a/DaSaSo.ViewModel/Window/MainWindowViewModel.cs +++ b/DaSaSo.ViewModel/Window/MainWindowViewModel.cs @@ -27,8 +27,9 @@ namespace DaSaSo.ViewModel public bool CanSelectBuildingSite { get => _actualProject.AktuellProjekt != null; } public bool CanSelectSewerObjects { get => _actualProject.AktuellBaustelle != null; } - public INavigator Navigator { get; set; } + public INavigator _navigator { get; set; } public ICommand UpdateCurrentViewModelCommand { get; } + public BaseViewModel CurrentViewModel => _navigator.CurrentViewModel; public string ClientName { @@ -70,32 +71,43 @@ namespace DaSaSo.ViewModel public MainWindowViewModel(INavigator navigator,IViewModelAbstractFactory viewModelFactory, IActualProject actualProject) { - this.Navigator = navigator; + this._navigator = navigator; this.viewModelFactory = viewModelFactory; + + _navigator.StateChanged += _navigator_StateChanged; + UpdateCurrentViewModelCommand = new UpdateCurrentViewModelCommand(navigator, viewModelFactory); - UpdateCurrentViewModelCommand.Execute(EViewType.Home); + UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.Home); _actualProject = actualProject; _actualProject.ClientChanged += _actualProject_ClientChanged; _actualProject.ProjectChanged += _actualProject_ProjectChanged; _actualProject.BuildingSiteChanged += _actualProject_BuildingSiteChanged; } + private void _navigator_StateChanged() + { + OnPropertyChanged(nameof(CurrentViewModel)); + } + private void _actualProject_BuildingSiteChanged(object? sender, EventArgs e) { Buildingsitename = _actualProject.AktuellBaustelle.BuildingSiteNumber; OnPropertyChanged(nameof(CanSelectSewerObjects)); + UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.SewerObjects); } private void _actualProject_ProjectChanged(object? sender, EventArgs e) { Projektname = _actualProject.AktuellProjekt.Name; OnPropertyChanged(nameof(CanSelectBuildingSite)); + UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.Buildingsites); } private void _actualProject_ClientChanged(object? sender, EventArgs e) { ClientName = _actualProject.AktuellClient.Firstname; OnPropertyChanged(nameof(CanSelectProject)); + UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.Projects); } } } diff --git a/DaSaSo.Wpf/App.xaml.cs b/DaSaSo.Wpf/App.xaml.cs index 2e12669..3afaf59 100644 --- a/DaSaSo.Wpf/App.xaml.cs +++ b/DaSaSo.Wpf/App.xaml.cs @@ -40,6 +40,7 @@ namespace DaSaSo.Wpf string connectionString = context.Configuration.GetConnectionString("default"); services.AddSingleton(new DaSaSoDbContextFactory(connectionString)); + services.AddSingleton, ClientDataService>(); services.AddSingleton, ProjectDataService>(); services.AddSingleton, BuildingsiteDataService>(); @@ -48,7 +49,7 @@ namespace DaSaSo.Wpf - services.AddSingleton(); + services.AddSingleton(); services.AddSingleton>(services => { return () => new ClientEditViewModel( @@ -112,9 +113,12 @@ namespace DaSaSo.Wpf _host.Start(); - + MainWindow? window = new MainWindow() { DataContext = _host.Services.GetRequiredService() }; window.Show(); + + + base.OnStartup(e); } diff --git a/DaSaSo.Wpf/Controls/MainWindowNavigationBar.xaml b/DaSaSo.Wpf/Controls/MainWindowNavigationBar.xaml new file mode 100644 index 0000000..1241197 --- /dev/null +++ b/DaSaSo.Wpf/Controls/MainWindowNavigationBar.xaml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + diff --git a/DaSaSo.Wpf/Controls/NavigationBar.xaml.cs b/DaSaSo.Wpf/Controls/MainWindowNavigationBar.xaml.cs similarity index 84% rename from DaSaSo.Wpf/Controls/NavigationBar.xaml.cs rename to DaSaSo.Wpf/Controls/MainWindowNavigationBar.xaml.cs index 4c2d502..cb128d3 100644 --- a/DaSaSo.Wpf/Controls/NavigationBar.xaml.cs +++ b/DaSaSo.Wpf/Controls/MainWindowNavigationBar.xaml.cs @@ -18,9 +18,9 @@ namespace DaSaSo.Wpf.Controls /// /// Interaction logic for NavigationBar.xaml /// - public partial class NavigationBar : UserControl + public partial class MainWindowNavigationBar : UserControl { - public NavigationBar() + public MainWindowNavigationBar() { InitializeComponent(); } diff --git a/DaSaSo.Wpf/Controls/NavigationBar.xaml b/DaSaSo.Wpf/Controls/NavigationBar.xaml deleted file mode 100644 index 661e152..0000000 --- a/DaSaSo.Wpf/Controls/NavigationBar.xaml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - diff --git a/DaSaSo.Wpf/Controls/SewerObjectNavigationBar.xaml b/DaSaSo.Wpf/Controls/SewerObjectNavigationBar.xaml new file mode 100644 index 0000000..6ec4d49 --- /dev/null +++ b/DaSaSo.Wpf/Controls/SewerObjectNavigationBar.xaml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/DaSaSo.Wpf/Controls/SewerObjectNavigationBar.xaml.cs b/DaSaSo.Wpf/Controls/SewerObjectNavigationBar.xaml.cs new file mode 100644 index 0000000..903572e --- /dev/null +++ b/DaSaSo.Wpf/Controls/SewerObjectNavigationBar.xaml.cs @@ -0,0 +1,28 @@ +using System; +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 DaSaSo.Wpf.Controls +{ + /// + /// Interaction logic for SewerObjectNavigationBar.xaml + /// + public partial class SewerObjectNavigationBar : UserControl + { + public SewerObjectNavigationBar() + { + InitializeComponent(); + } + } +} diff --git a/DaSaSo.Wpf/Converters/EqualValueToParameterConverter.cs b/DaSaSo.Wpf/Converters/EqualValueToParameterConverter.cs new file mode 100644 index 0000000..9399ef8 --- /dev/null +++ b/DaSaSo.Wpf/Converters/EqualValueToParameterConverter.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Data; + +namespace DaSaSo.Wpf.Converters +{ + public class EqualValueToParameterConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + return value.ToString() == parameter.ToString(); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/DaSaSo.Wpf/DaSaSo.Wpf.csproj.user b/DaSaSo.Wpf/DaSaSo.Wpf.csproj.user index ad1be3b..0e48937 100644 --- a/DaSaSo.Wpf/DaSaSo.Wpf.csproj.user +++ b/DaSaSo.Wpf/DaSaSo.Wpf.csproj.user @@ -7,7 +7,10 @@ - + + Code + + Code @@ -28,9 +31,15 @@ Code + + Code + - + + Designer + + Designer @@ -57,6 +66,9 @@ Designer + + Designer + Designer diff --git a/DaSaSo.Wpf/Service/WindowService.cs b/DaSaSo.Wpf/Service/WindowService.cs new file mode 100644 index 0000000..bff9426 --- /dev/null +++ b/DaSaSo.Wpf/Service/WindowService.cs @@ -0,0 +1,15 @@ +using DaSaSo.ViewModel.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; + +namespace DaSaSo.Wpf.Service +{ + class WindowService + { + + } +} diff --git a/DaSaSo.Wpf/View/SewerObject/SewerMainView.xaml b/DaSaSo.Wpf/View/SewerObject/SewerMainView.xaml new file mode 100644 index 0000000..a343131 --- /dev/null +++ b/DaSaSo.Wpf/View/SewerObject/SewerMainView.xaml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + diff --git a/DaSaSo.Wpf/View/SewerObject/SewerMainView.xaml.cs b/DaSaSo.Wpf/View/SewerObject/SewerMainView.xaml.cs new file mode 100644 index 0000000..bd1fca8 --- /dev/null +++ b/DaSaSo.Wpf/View/SewerObject/SewerMainView.xaml.cs @@ -0,0 +1,28 @@ +using System; +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 DaSaSo.Wpf.View.SewerObject +{ + /// + /// Interaction logic for SewerMainView.xaml + /// + public partial class SewerMainView : UserControl + { + public SewerMainView() + { + InitializeComponent(); + } + } +} diff --git a/DaSaSo.Wpf/View/SewerObjecte/SewerObjecteListView.xaml b/DaSaSo.Wpf/View/SewerObjecte/SewerObjecteListView.xaml index 3258346..681d524 100644 --- a/DaSaSo.Wpf/View/SewerObjecte/SewerObjecteListView.xaml +++ b/DaSaSo.Wpf/View/SewerObjecte/SewerObjecteListView.xaml @@ -33,7 +33,7 @@ -