diff --git a/SewerStammGen/App.xaml b/SewerStammGen/App.xaml
index b4be063..56ffa5b 100644
--- a/SewerStammGen/App.xaml
+++ b/SewerStammGen/App.xaml
@@ -4,6 +4,10 @@
xmlns:local="clr-namespace:SewerStammGen"
>
-
+
+
+
+
+
diff --git a/SewerStammGen/Commands/AsyncCommandBase.cs b/SewerStammGen/Commands/AsyncCommandBase.cs
new file mode 100644
index 0000000..2efd230
--- /dev/null
+++ b/SewerStammGen/Commands/AsyncCommandBase.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+
+namespace SewerStammGen.Commands
+{
+ internal abstract class AsyncCommandBase : ICommand
+ {
+ bool _isExecuting = false;
+ public event EventHandler? CanExecuteChanged;
+
+ public bool IsExecuting
+ {
+ get => _isExecuting;
+ set
+ {
+ _isExecuting = value;
+ CanExecuteChanged?.Invoke(this, new EventArgs());
+ }
+ }
+
+ protected void OnCanExecuteChanged()
+ {
+ CanExecuteChanged?.Invoke(this, new EventArgs());
+ }
+
+
+ public virtual bool CanExecute(object? parameter)
+ {
+ return !IsExecuting;
+ }
+
+ public async void Execute(object? parameter)
+ {
+ IsExecuting = true;
+ await ExecuteAsync(parameter);
+ IsExecuting = false;
+ }
+
+ public abstract Task ExecuteAsync(object? parameter);
+ }
+}
diff --git a/SewerStammGen/Commands/UpdateCurrentViewModelCommand.cs b/SewerStammGen/Commands/UpdateCurrentViewModelCommand.cs
new file mode 100644
index 0000000..ffd8472
--- /dev/null
+++ b/SewerStammGen/Commands/UpdateCurrentViewModelCommand.cs
@@ -0,0 +1,32 @@
+using SewerStammGen.Enum;
+using SewerStammGen.Interface;
+using SewerStammGen.Interface.Navigator;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SewerStammGen.Commands
+{
+ internal class UpdateCurrentViewModelCommand : AsyncCommandBase
+ {
+ private INavigator _navigator;
+ private readonly IViewModelAbstractFactory _viewModelFactory;
+
+ public UpdateCurrentViewModelCommand(INavigator navigator, IViewModelAbstractFactory viewModelFactory)
+ {
+ _navigator = navigator;
+ _viewModelFactory = viewModelFactory;
+ }
+
+ public override async Task ExecuteAsync(object? parameter)
+ {
+ if(parameter is EMainWindowViewType)
+ {
+ EMainWindowViewType viewType = (EMainWindowViewType)parameter;
+ _navigator.CurrentViewModel = _viewModelFactory.CreateViewModel(viewType);
+ }
+ }
+ }
+}
diff --git a/SewerStammGen/EMainWindowViewType.cs b/SewerStammGen/Enum/EMainWindowViewType.cs
similarity index 64%
rename from SewerStammGen/EMainWindowViewType.cs
rename to SewerStammGen/Enum/EMainWindowViewType.cs
index f2f7bbc..4064bd1 100644
--- a/SewerStammGen/EMainWindowViewType.cs
+++ b/SewerStammGen/Enum/EMainWindowViewType.cs
@@ -4,10 +4,13 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-namespace SewerStammGen
+namespace SewerStammGen.Enum
{
public enum EMainWindowViewType
{
- Home
+ Home,
+ Projects,
+ Manholes,
+ Sewer
}
}
diff --git a/SewerStammGen/HostBuilders/AddViewModelsHostBuilderExtensions.cs b/SewerStammGen/HostBuilders/AddViewModelsHostBuilderExtensions.cs
index c225ff2..325671f 100644
--- a/SewerStammGen/HostBuilders/AddViewModelsHostBuilderExtensions.cs
+++ b/SewerStammGen/HostBuilders/AddViewModelsHostBuilderExtensions.cs
@@ -1,6 +1,8 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
+using SewerStammGen.Interface;
using SewerStammGen.ViewModel;
+using SewerStammGen.ViewModel.Factories;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -16,6 +18,14 @@ namespace SewerStammGen.HostBuilders
hostBuilder.ConfigureServices(services =>
{
services.AddTransient();
+ services.AddSingleton>(services =>
+ {
+ return () => new HomeViewModel();
+ });
+
+
+
+ services.AddSingleton();
});
return hostBuilder;
diff --git a/SewerStammGen/Interface/IViewModelAbstractFactory.cs b/SewerStammGen/Interface/IViewModelAbstractFactory.cs
index 00a887a..227dba8 100644
--- a/SewerStammGen/Interface/IViewModelAbstractFactory.cs
+++ b/SewerStammGen/Interface/IViewModelAbstractFactory.cs
@@ -1,4 +1,5 @@
-using SewerStammGen.ViewModel;
+using SewerStammGen.Enum;
+using SewerStammGen.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
diff --git a/SewerStammGen/Interface/Navigator/IMainWindowNavigator.cs b/SewerStammGen/Interface/Navigator/IMainWindowNavigator.cs
index 4b94778..d00c87a 100644
--- a/SewerStammGen/Interface/Navigator/IMainWindowNavigator.cs
+++ b/SewerStammGen/Interface/Navigator/IMainWindowNavigator.cs
@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace SewerStammGen.Interface.Navigator
{
- internal interface IMainWindowNavigator : INavigator
+ public interface IMainWindowNavigator : INavigator
{
}
}
diff --git a/SewerStammGen/Interface/Navigator/INavigator.cs b/SewerStammGen/Interface/Navigator/INavigator.cs
index bb3a267..a079e53 100644
--- a/SewerStammGen/Interface/Navigator/INavigator.cs
+++ b/SewerStammGen/Interface/Navigator/INavigator.cs
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace SewerStammGen.Interface.Navigator
{
- internal interface INavigator
+ public interface INavigator
{
BaseViewModel CurrentViewModel
{
diff --git a/SewerStammGen/MainWindow.xaml b/SewerStammGen/MainWindow.xaml
index b2ce5b6..53ac263 100644
--- a/SewerStammGen/MainWindow.xaml
+++ b/SewerStammGen/MainWindow.xaml
@@ -5,14 +5,15 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:my="clr-namespace:SewerStammGen.Views"
xmlns:local="clr-namespace:SewerStammGen"
+ xmlns:controls="clr-namespace:SewerStammGen.Views.Controls"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
-
+
-
+
diff --git a/SewerStammGen/MainWindow.xaml.cs b/SewerStammGen/MainWindow.xaml.cs
index fcda81c..59577d8 100644
--- a/SewerStammGen/MainWindow.xaml.cs
+++ b/SewerStammGen/MainWindow.xaml.cs
@@ -24,7 +24,7 @@ namespace SewerStammGen
{
InitializeComponent();
- SewerConnector.DataContext = new ViewModel.SewerConnectorViewModel();
+ //SewerConnector.DataContext = new ViewModel.SewerConnectorViewModel();
}
}
}
diff --git a/SewerStammGen/SewerStammGen.csproj.user b/SewerStammGen/SewerStammGen.csproj.user
index 3f5f9d0..e8337de 100644
--- a/SewerStammGen/SewerStammGen.csproj.user
+++ b/SewerStammGen/SewerStammGen.csproj.user
@@ -7,9 +7,15 @@
+
+ Code
+
Code
+
+ Code
+
Code
@@ -21,9 +27,18 @@
Designer
+
+ Designer
+
Designer
+
+ Designer
+
+
+ Designer
+
Designer
diff --git a/SewerStammGen/ViewModel/Factories/MainWindowViewModelFactory.cs b/SewerStammGen/ViewModel/Factories/MainWindowViewModelFactory.cs
new file mode 100644
index 0000000..c64c3a5
--- /dev/null
+++ b/SewerStammGen/ViewModel/Factories/MainWindowViewModelFactory.cs
@@ -0,0 +1,34 @@
+using SewerStammGen.Enum;
+using SewerStammGen.Interface;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SewerStammGen.ViewModel.Factories
+{
+ public class MainWindowViewModelFactory : IViewModelAbstractFactory
+ {
+ private CreateViewModel _createHomeViewModel;
+
+ public MainWindowViewModelFactory(
+ CreateViewModel createHomeViewModel
+ )
+ {
+ _createHomeViewModel = createHomeViewModel;
+ }
+
+ public BaseViewModel CreateViewModel(EMainWindowViewType viewType)
+ {
+ switch(viewType)
+ {
+ case EMainWindowViewType.Home:
+ return _createHomeViewModel();
+
+ default:
+ throw new NotImplementedException();
+ }
+ }
+ }
+}
diff --git a/SewerStammGen/ViewModel/HomeViewModel.cs b/SewerStammGen/ViewModel/HomeViewModel.cs
new file mode 100644
index 0000000..cb75f79
--- /dev/null
+++ b/SewerStammGen/ViewModel/HomeViewModel.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SewerStammGen.ViewModel
+{
+ public class HomeViewModel : BaseViewModel
+ {
+ }
+}
diff --git a/SewerStammGen/ViewModel/IViewModel.cs b/SewerStammGen/ViewModel/IViewModel.cs
deleted file mode 100644
index 9ea11a4..0000000
--- a/SewerStammGen/ViewModel/IViewModel.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace SewerStammGen.ViewModel
-{
- public interface IViewModel : INotifyPropertyChanged
- {
-
- }
-
- public interface IViewModel : IViewModel
- {
- [Browsable(false)]
- [Bindable(false)]
- TModel Model { get; set; }
- }
-}
diff --git a/SewerStammGen/ViewModel/MainWindowViewModel.cs b/SewerStammGen/ViewModel/MainWindowViewModel.cs
index 92f0392..766becc 100644
--- a/SewerStammGen/ViewModel/MainWindowViewModel.cs
+++ b/SewerStammGen/ViewModel/MainWindowViewModel.cs
@@ -1,21 +1,34 @@
-using SewerStammGen.Interface.Navigator;
+using SewerStammGen.Commands;
+using SewerStammGen.Enum;
+using SewerStammGen.Interface;
+using SewerStammGen.Interface.Navigator;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
+using System.Windows.Input;
namespace SewerStammGen.ViewModel
{
- internal class MainWindowViewModel : BaseViewModel
+ public class MainWindowViewModel : BaseViewModel
{
public IMainWindowNavigator Navigator { get; set; }
- public BaseViewModel CurrentView => Navigator.CurrentViewModel;
+ public BaseViewModel CurrentViewModel => Navigator.CurrentViewModel;
- public MainWindowViewModel(IMainWindowNavigator navigator)
+ public ICommand UpdateCurrentViewModelCommand { get; }
+
+ public MainWindowViewModel(
+ IMainWindowNavigator navigator,
+ IViewModelAbstractFactory viewModelFactory
+
+ )
{
Navigator = navigator;
+
+ UpdateCurrentViewModelCommand = new UpdateCurrentViewModelCommand(navigator, viewModelFactory);
+ UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.Home);
}
}
}
diff --git a/SewerStammGen/ViewModel/ProjectListViewModel.cs b/SewerStammGen/ViewModel/ProjectListViewModel.cs
new file mode 100644
index 0000000..82bea97
--- /dev/null
+++ b/SewerStammGen/ViewModel/ProjectListViewModel.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SewerStammGen.ViewModel
+{
+ public class ProjectListViewModel : BaseViewModel
+ {
+
+ }
+}
diff --git a/SewerStammGen/ViewModel/SewerConnectorViewModel.cs b/SewerStammGen/ViewModel/SewerConnectorViewModel.cs
index 0d46598..4b7b1d2 100644
--- a/SewerStammGen/ViewModel/SewerConnectorViewModel.cs
+++ b/SewerStammGen/ViewModel/SewerConnectorViewModel.cs
@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace SewerStammGen.ViewModel
{
- class SewerConnectorViewModel : ViewModel
+ class SewerConnectorViewModel : BaseViewModel
{
}
}
diff --git a/SewerStammGen/ViewModel/ViewModel.cs b/SewerStammGen/ViewModel/ViewModel.cs
deleted file mode 100644
index a878ffe..0000000
--- a/SewerStammGen/ViewModel/ViewModel.cs
+++ /dev/null
@@ -1,179 +0,0 @@
-using Syncfusion.UI.Xaml.Collections.Generic;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace SewerStammGen.ViewModel
-{
- [Serializable]
- public abstract class ViewModel : IViewModel
- {
- protected ViewModel()
- {
- var initializationTask = new Task(() => Initialize());
- initializationTask.ContinueWith(result => InitializationCompletedCallback(result));
- initializationTask.Start();
- }
-
-
- ///
- /// Initializes this instance.
- ///
- protected virtual void Initialize()
- {
- }
-
-
- ///
- /// Callback method for the async initialization.
- ///
- /// The result.
- private void InitializationCompletedCallback(IAsyncResult result)
- {
- var initializationCompleted = InitializationCompleted;
- if (initializationCompleted != null)
- {
- InitializationCompleted(this, new AsyncCompletedEventArgs(null, !result.IsCompleted, result.AsyncState));
- }
- InitializationCompleted = null;
- }
-
- ///
- /// Occurs when the initialization is completed.
- ///
- public event AsyncCompletedEventHandler InitializationCompleted;
-
- ///
- /// Called when a property has changed.
- ///
- /// Name of the property.
- ///
- protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = "")
- {
- PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
- }
-
- #region INotifyPropertyChanged Members
-
- ///
- /// Occurs when a property value changes.
- ///
- ///
- public event PropertyChangedEventHandler PropertyChanged;
-
- #endregion
- }
-
- public abstract class ViewModel : ViewModel, IViewModel where TModel : class
- {
- private TModel model;
-
- ///
- /// The Model encapsulated by this ViewModel.
- ///
- /// If you change this, all needed PropertyChanged events will be raised automatically.
- [Browsable(false)]
- [Bindable(false)]
- public TModel Model
- {
- get
- {
- return model;
- }
- set
- {
- if (Model != value)
- {
- // get all properties
- var properties = this.GetType().GetProperties(BindingFlags.Public);
- // all values before the model has changed
- var oldValues = properties.Select(p => p.GetValue(this, null));
- var enumerator = oldValues.GetEnumerator();
-
- model = value;
-
- // call OnPropertyChanged for all changed properties
- foreach (var property in properties)
- {
- enumerator.MoveNext();
- var oldValue = enumerator.Current;
- var newValue = property.GetValue(this, null);
-
- if ((oldValue == null && newValue != null)
- || (oldValue != null && newValue == null)
- || (!oldValue.Equals(newValue)))
- {
- OnPropertyChanged(property.Name);
- }
- }
- }
- }
- }
-
-
- ///
- /// Initializes a new instance of the class.
- ///
- ///
- protected ViewModel(TModel model)
- : base()
- {
- this.Model = model;
- }
-
- ///
- /// Returns a hash code for this instance.
- ///
- ///
- /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
- ///
- public override int GetHashCode()
- {
- return Model.GetHashCode();
- }
-
- ///
- /// Determines whether the specified is equal to this instance.
- ///
- /// The to compare with this instance.
- ///
- /// true if the specified is equal to this instance; otherwise, false.
- ///
- public override bool Equals(object obj)
- {
- if (obj == null)
- return false;
-
- var other = obj as IViewModel;
-
- if (other == null)
- return false;
-
- return Equals(other);
- }
-
-
- ///
- /// Determines whether the specified is equal to this instance.
- ///
- /// The to compare with this instance.
- ///
- /// true if the specified is equal to this instance; otherwise, false.
- ///
- public bool Equals(IViewModel other)
- {
- if (other == null)
- return false;
-
- if (Model == null)
- return Model == other.Model;
-
- return Model.Equals(other.Model);
- }
- }
-}
diff --git a/SewerStammGen/Views/Controls/UCMainWindowNavigationBar.xaml b/SewerStammGen/Views/Controls/UCMainWindowNavigationBar.xaml
new file mode 100644
index 0000000..d7eec9b
--- /dev/null
+++ b/SewerStammGen/Views/Controls/UCMainWindowNavigationBar.xaml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SewerStammGen/Views/Controls/UCMainWindowNavigationBar.xaml.cs b/SewerStammGen/Views/Controls/UCMainWindowNavigationBar.xaml.cs
new file mode 100644
index 0000000..1089341
--- /dev/null
+++ b/SewerStammGen/Views/Controls/UCMainWindowNavigationBar.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 SewerStammGen.Views.Controls
+{
+ ///
+ /// Interaktionslogik für UCMainWindowNavigationBar.xaml
+ ///
+ public partial class UCMainWindowNavigationBar : UserControl
+ {
+ public UCMainWindowNavigationBar()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/SewerStammGen/Views/Converters/EqualValueToParameterConverter.cs b/SewerStammGen/Views/Converters/EqualValueToParameterConverter.cs
new file mode 100644
index 0000000..2ad9793
--- /dev/null
+++ b/SewerStammGen/Views/Converters/EqualValueToParameterConverter.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+
+namespace SewerStammGen.Views.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/SewerStammGen/Views/HomeView.xaml b/SewerStammGen/Views/HomeView.xaml
new file mode 100644
index 0000000..8230e6b
--- /dev/null
+++ b/SewerStammGen/Views/HomeView.xaml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/SewerStammGen/Views/HomeView.xaml.cs b/SewerStammGen/Views/HomeView.xaml.cs
new file mode 100644
index 0000000..901125f
--- /dev/null
+++ b/SewerStammGen/Views/HomeView.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 SewerStammGen.Views
+{
+ ///
+ /// Interaktionslogik für HomeView.xaml
+ ///
+ public partial class HomeView : UserControl
+ {
+ public HomeView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/SewerStammGen/Views/styles/my_controls.xaml b/SewerStammGen/Views/styles/my_controls.xaml
new file mode 100644
index 0000000..acfecb6
--- /dev/null
+++ b/SewerStammGen/Views/styles/my_controls.xaml
@@ -0,0 +1,30 @@
+
+
+
\ No newline at end of file