diff --git a/DaSaSo.ViewModel/BaseViewModel.cs b/DaSaSo.ViewModel/BaseViewModel.cs index 64d0f7c..ced4172 100644 --- a/DaSaSo.ViewModel/BaseViewModel.cs +++ b/DaSaSo.ViewModel/BaseViewModel.cs @@ -1,20 +1,8 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading.Tasks; - -namespace DaSaSo.ViewModel +namespace DaSaSo.ViewModel { - public class BaseViewModel : INotifyPropertyChanged - { - public event PropertyChangedEventHandler? PropertyChanged; - protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null) - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); - } + public class BaseViewModel : ObservableObject + { + } } diff --git a/DaSaSo.ViewModel/ClientListViewModel.cs b/DaSaSo.ViewModel/ClientListViewModel.cs index 595fbef..4d7c87a 100644 --- a/DaSaSo.ViewModel/ClientListViewModel.cs +++ b/DaSaSo.ViewModel/ClientListViewModel.cs @@ -1,6 +1,7 @@ using DaSaSo.Domain.Model; using DaSaSo.Domain.Services; using DaSaSo.ViewModel.Commands; +using DaSaSo.ViewModel.Enums; using DaSaSo.ViewModel.Interface; using Microsoft.Toolkit.Mvvm.Input; using System; @@ -19,11 +20,12 @@ namespace DaSaSo.ViewModel public ObservableCollection Clients { get; } private Client? _selectedClient; private IDataService _dataService; + private readonly IRenavigator renavigator; IEnumerable? result; bool _isLoading = true; public ICommand SelectCommand { get; set; } - public IRelayCommand EditClientCommand { get; set; } + public ICommand EditCommand { get; set; } public IRelayCommand AddNewClientCommand { get; set; } public Client SelectedClient @@ -54,17 +56,23 @@ namespace DaSaSo.ViewModel } } - public ClientListViewModel(IDataService dataService, IActualProject actualProject) + public ClientListViewModel(IDataService dataService, IActualProject actualProject, IRenavigator renavigator) { Clients = new ObservableCollection(); _dataService = dataService; - - + this.renavigator = renavigator; LoadClient(); - SelectCommand = new SelectClientCommand(actualProject,this); //= new RelayCommand(SelectClient, () => SelectedClient != null); + SelectCommand = new SelectClientCommand(actualProject, this); //= new RelayCommand(SelectClient, () => SelectedClient != null); + EditCommand = new EditClientCommand(actualProject,renavigator,this); //EditClientCommand = new RelayCommand(EditClient, () => SelectedClient != null); //AddNewClientCommand = new RelayCommand(AddNewClient); + + } + + private void edit() + { + //_navigator.UpdateViewModelCommand.Execute(EViewType.ClientEdit); } private async Task insertNewClient() diff --git a/DaSaSo.ViewModel/Commands/EditClientCommand.cs b/DaSaSo.ViewModel/Commands/EditClientCommand.cs new file mode 100644 index 0000000..62d5b1a --- /dev/null +++ b/DaSaSo.ViewModel/Commands/EditClientCommand.cs @@ -0,0 +1,40 @@ +using DaSaSo.ViewModel.Interface; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; + +namespace DaSaSo.ViewModel.Commands +{ + public class EditClientCommand : ICommand + { + private readonly IActualProject actualProject; + private readonly IRenavigator renavigator; + private readonly ClientListViewModel clientListViewModel; + + public event EventHandler? CanExecuteChanged; + + + + public EditClientCommand(IActualProject actualProject,IRenavigator renavigator, ClientListViewModel clientListViewModel) + { + this.actualProject = actualProject; + this.renavigator = renavigator; + this.clientListViewModel = clientListViewModel; + } + + public bool CanExecute(object? parameter) + { + return true; + } + + public void Execute(object? parameter) + { + actualProject.SetClient(clientListViewModel.SelectedClient); + renavigator.Renavigate(); + } + } +} diff --git a/DaSaSo.ViewModel/Factories/ClientListViewModelFactory.cs b/DaSaSo.ViewModel/Factories/ClientListViewModelFactory.cs index fc50dc6..00d3c14 100644 --- a/DaSaSo.ViewModel/Factories/ClientListViewModelFactory.cs +++ b/DaSaSo.ViewModel/Factories/ClientListViewModelFactory.cs @@ -13,15 +13,17 @@ namespace DaSaSo.ViewModel.Factories public class ClientListViewModelFactory : IViewModelFactory { private readonly IActualProject _actualProject; + private readonly IRenavigator renavigator; - public ClientListViewModelFactory(IActualProject actualProject) + public ClientListViewModelFactory(IActualProject actualProject, IRenavigator renavigator) { _actualProject = actualProject; + this.renavigator = renavigator; } public ClientListViewModel CreateViewModel() { - return new ClientListViewModel(new GenericDataService(new DaSaSoDbContextFactory()),_actualProject); + return new ClientListViewModel(new GenericDataService(new DaSaSoDbContextFactory()),_actualProject, renavigator); } } } diff --git a/DaSaSo.ViewModel/Interface/IActualProject.cs b/DaSaSo.ViewModel/Interface/IActualProject.cs index c0a3c25..01de03d 100644 --- a/DaSaSo.ViewModel/Interface/IActualProject.cs +++ b/DaSaSo.ViewModel/Interface/IActualProject.cs @@ -9,10 +9,15 @@ namespace DaSaSo.ViewModel.Interface { public interface IActualProject { + event EventHandler? ClientChanged; + event EventHandler? ProjectChanged; + event EventHandler? BuildingSiteChanged; Client AktuellClient { get; } Project AktuellProjekt { get; } Buildingsite AktuellBaustelle { get; } void SetClient(Client client); + void SetProject(Project project); + void SetBuildingSite(Buildingsite buildingsite); } } diff --git a/DaSaSo.ViewModel/Interface/INavigator.cs b/DaSaSo.ViewModel/Interface/INavigator.cs index 7c4f1f2..220d3af 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; } - ICommand UpdateViewModelCommand { get; } + } } diff --git a/DaSaSo.ViewModel/Interface/IRenavigator.cs b/DaSaSo.ViewModel/Interface/IRenavigator.cs new file mode 100644 index 0000000..b744d9a --- /dev/null +++ b/DaSaSo.ViewModel/Interface/IRenavigator.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 IRenavigator + { + void Renavigate(); + } +} diff --git a/DaSaSo.ViewModel/ObservableObject.cs b/DaSaSo.ViewModel/ObservableObject.cs new file mode 100644 index 0000000..97a507b --- /dev/null +++ b/DaSaSo.ViewModel/ObservableObject.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace DaSaSo.ViewModel +{ + public class ObservableObject : INotifyPropertyChanged + { + public event PropertyChangedEventHandler? PropertyChanged; + protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/DaSaSo.ViewModel/State/ActualState/ActualProject.cs b/DaSaSo.ViewModel/State/ActualState/ActualProject.cs index a34e9fd..43dc7e2 100644 --- a/DaSaSo.ViewModel/State/ActualState/ActualProject.cs +++ b/DaSaSo.ViewModel/State/ActualState/ActualProject.cs @@ -11,14 +11,42 @@ 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 Project AktuellProjekt { get; private set; } - + #region events + public event EventHandler? ClientChanged; + public event EventHandler? ProjectChanged; + public event EventHandler? BuildingSiteChanged; + protected void OnClientChanged() + { + ClientChanged?.Invoke(this, new EventArgs()); + } + protected void OnProjectChanged() + { + ProjectChanged?.Invoke(this, new EventArgs()); + } + protected void OnBuildingSiteChanged() + { + BuildingSiteChanged?.Invoke(this, new EventArgs()); + } + #endregion public void SetClient(Client client) { AktuellClient = client; + OnClientChanged(); + } + + public void SetProject(Project project) + { + AktuellProjekt = project; + OnProjectChanged(); + } + + public void SetBuildingSite(Buildingsite buildingsite) + { + AktuellBaustelle = buildingsite; + OnBuildingSiteChanged(); } } } diff --git a/DaSaSo.ViewModel/State/Navigation/Navigator.cs b/DaSaSo.ViewModel/State/Navigation/Navigator.cs index cde24ea..53eb1e0 100644 --- a/DaSaSo.ViewModel/State/Navigation/Navigator.cs +++ b/DaSaSo.ViewModel/State/Navigation/Navigator.cs @@ -6,9 +6,9 @@ using System.Windows.Input; namespace DaSaSo.ViewModel.State.Navigation { - public class Navigator : INavigator, INotifyPropertyChanged + public class Navigator : ObservableObject, INavigator { - public event PropertyChangedEventHandler? PropertyChanged; + private BaseViewModel _currentViewModel; public BaseViewModel CurrentViewModel { @@ -19,17 +19,5 @@ namespace DaSaSo.ViewModel.State.Navigation OnPropertyChanged(); } } - - public ICommand UpdateViewModelCommand { get; set; } - - public Navigator(IViewModelAbstractFactory viewModelFactory) - { - UpdateViewModelCommand = new UpdateCurrentViewModelCommand(this, viewModelFactory); - } - - protected void OnPropertyChanged([CallerMemberName]string propertyName = null) - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); - } } } diff --git a/DaSaSo.ViewModel/State/Navigation/ViewModelFactoryRenavigator.cs b/DaSaSo.ViewModel/State/Navigation/ViewModelFactoryRenavigator.cs new file mode 100644 index 0000000..b7c5d7b --- /dev/null +++ b/DaSaSo.ViewModel/State/Navigation/ViewModelFactoryRenavigator.cs @@ -0,0 +1,26 @@ +using DaSaSo.ViewModel.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DaSaSo.ViewModel.State.Navigation +{ + public class ViewModelFactoryRenavigator : IRenavigator where TViewModel : BaseViewModel + { + private readonly INavigator _navigator; + private readonly IViewModelFactory _viewModelFactory; + + public ViewModelFactoryRenavigator(INavigator navigator, IViewModelFactory viewModelFactory) + { + _navigator = navigator; + _viewModelFactory = viewModelFactory; + } + + public void Renavigate() + { + _navigator.CurrentViewModel = _viewModelFactory.CreateViewModel(); + } + } +} diff --git a/DaSaSo.ViewModel/Window/MainWindowViewModel.cs b/DaSaSo.ViewModel/Window/MainWindowViewModel.cs index 4768fcc..ed28e8d 100644 --- a/DaSaSo.ViewModel/Window/MainWindowViewModel.cs +++ b/DaSaSo.ViewModel/Window/MainWindowViewModel.cs @@ -1,6 +1,7 @@ using DaSaSo.Domain.Model; using DaSaSo.EntityFramework; using DaSaSo.EntityFramework.Services; +using DaSaSo.ViewModel.Commands; using DaSaSo.ViewModel.Enums; using DaSaSo.ViewModel.Interface; using DaSaSo.ViewModel.State.Navigation; @@ -17,87 +18,78 @@ namespace DaSaSo.ViewModel { public sealed class MainWindowViewModel : BaseViewModel { - - private Client _selectedClient; - private Project _selectedProject; - private Buildingsite _selectedBuildingsite; + private readonly IViewModelAbstractFactory viewModelFactory; + private readonly IActualProject _actualProject; + private string _clientname = ""; + private string _projektname = ""; + private string _buildingsitename = ""; public INavigator Navigator { get; set; } + public ICommand UpdateCurrentViewModelCommand { get; } - public Project SelectedProject + public string ClientName { - get => _selectedProject; + get => _clientname; set { - if(_selectedProject != value) + if(_clientname != value) { - _selectedProject = value; - OnPropertyChanged(); - } - } - } - public Buildingsite SelectedBuildingsite - { - get => _selectedBuildingsite; - set - { - if(_selectedBuildingsite != value) - { - _selectedBuildingsite = value; + _clientname = value; OnPropertyChanged(); } } } - public Client SelectedClient + public string Projektname { - get => _selectedClient; + get => _projektname; set { - if(_selectedClient != value) + if (_projektname != value) { - _selectedClient = value; - //SelectedProject = null; + _projektname = value; OnPropertyChanged(); } } } - public MainWindowViewModel(INavigator navigator) + public string Buildingsitename + { + get => _buildingsitename; + set + { + if (_buildingsitename != value) + { + _buildingsitename = value; + OnPropertyChanged(); + } + } + } + + public MainWindowViewModel(INavigator navigator,IViewModelAbstractFactory viewModelFactory, IActualProject actualProject) { this.Navigator = navigator; - Navigator.UpdateViewModelCommand.Execute(EViewType.Home); - - - Mediator.Subscribe(Enums.EMediator.SELECTEDCLIENT, (tt) => - { - SelectedClient = (Client)tt; - listProjecte(); - }); - - Mediator.Subscribe(Enums.EMediator.EDITCLIENT, (tt) => - { - - }); - Mediator.Subscribe(Enums.EMediator.SHOWCLIENT, (tt) => { - - }); + this.viewModelFactory = viewModelFactory; + UpdateCurrentViewModelCommand = new UpdateCurrentViewModelCommand(navigator, viewModelFactory); + UpdateCurrentViewModelCommand.Execute(EViewType.Home); + _actualProject = actualProject; + _actualProject.ClientChanged += _actualProject_ClientChanged; + _actualProject.ProjectChanged += _actualProject_ProjectChanged; + _actualProject.BuildingSiteChanged += _actualProject_BuildingSiteChanged; } - - - private void listSewerObjects() + private void _actualProject_BuildingSiteChanged(object? sender, EventArgs e) { - throw new NotImplementedException(); + Buildingsitename = _actualProject.AktuellBaustelle.BuildingSiteNumber; } - private void listBuildingsite() + private void _actualProject_ProjectChanged(object? sender, EventArgs e) { - throw new NotImplementedException(); + Projektname = _actualProject.AktuellProjekt.Name; } - private void listProjecte() + private void _actualProject_ClientChanged(object? sender, EventArgs e) { - + ClientName = _actualProject.AktuellClient.Firstname; } } } diff --git a/DaSaSo.Wpf/App.xaml.cs b/DaSaSo.Wpf/App.xaml.cs index 7b44d3c..5732276 100644 --- a/DaSaSo.Wpf/App.xaml.cs +++ b/DaSaSo.Wpf/App.xaml.cs @@ -37,8 +37,11 @@ namespace DaSaSo.Wpf services.AddSingleton(); services.AddSingleton, HomeViewModelFactory>(); + services.AddSingleton>(); services.AddSingleton, ClientListViewModelFactory>(); services.AddSingleton, ClientEditViewModelFactory>(); + + //services.AddSingleton(); services.AddScoped(); services.AddScoped(); diff --git a/DaSaSo.Wpf/Controls/NavigationBar.xaml b/DaSaSo.Wpf/Controls/NavigationBar.xaml index 2d8a64f..fa79b02 100644 --- a/DaSaSo.Wpf/Controls/NavigationBar.xaml +++ b/DaSaSo.Wpf/Controls/NavigationBar.xaml @@ -14,9 +14,9 @@ - - - - + + + + diff --git a/DaSaSo.Wpf/View/Client/ClientListView.xaml b/DaSaSo.Wpf/View/Client/ClientListView.xaml index 131bc77..398269a 100644 --- a/DaSaSo.Wpf/View/Client/ClientListView.xaml +++ b/DaSaSo.Wpf/View/Client/ClientListView.xaml @@ -14,7 +14,7 @@