diff --git a/KanSan.Base/Interfaces/IDialogWindowService.cs b/KanSan.Base/Interfaces/IDialogWindowService.cs new file mode 100644 index 0000000..2d1e6e7 --- /dev/null +++ b/KanSan.Base/Interfaces/IDialogWindowService.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace KanSan.Base.Interfaces +{ + public interface IDialogWindowService + { + void showWindow(object viewModel); + } +} diff --git a/KanSan.Base/WindowService.cs b/KanSan.Base/WindowService.cs new file mode 100644 index 0000000..d4c9743 --- /dev/null +++ b/KanSan.Base/WindowService.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace KanSan.Base +{ + class WindowService + { + } +} diff --git a/KanSan.ViewModel/MainWindowViewModel.cs b/KanSan.ViewModel/MainWindowViewModel.cs index 6708fb5..0f6dbd4 100644 --- a/KanSan.ViewModel/MainWindowViewModel.cs +++ b/KanSan.ViewModel/MainWindowViewModel.cs @@ -2,6 +2,7 @@ using KanSan.Base.Interfaces; using KanSan.Base.Models; using KanSan.ViewModel.Commands; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Win32; using Syncfusion.XlsIO; using System; @@ -11,6 +12,7 @@ using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; +using System.Runtime.CompilerServices; using System.Text; using System.Windows.Input; @@ -32,10 +34,11 @@ namespace KanSan.ViewModel private Sewer _selectedObjekt; public static Baustelle Baustelle; + //public static Sewer SelectedObjekt; public static List LVPositionen = null; + public static IServiceProvider ServiceProvider { get; private set; } - public ICommand ListClientsCommand { get; set; } public ICommand ListProjectsCommand { get; set; } public ICommand ListBaustellenCommand { get; set; } @@ -48,13 +51,13 @@ namespace KanSan.ViewModel { get { - Trace.WriteLine(actualViewModel); return actualViewModel; + //return actualViewModel; } set { if (actualViewModel == value) return; - Trace.WriteLine("Setze viewModel auf " + value); + Trace.WriteLine("AktualView Geändert zu " + value); actualViewModel = value; OnPropertyChanged(); } @@ -145,6 +148,7 @@ namespace KanSan.ViewModel } } + public Sewer SelectedObjekt { get @@ -161,6 +165,7 @@ namespace KanSan.ViewModel OnPropertyChanged(); } } + private void SaveInRegistry(string key, string value) { Registry.SetValue(REGISTRYKEY, key, value); @@ -223,10 +228,11 @@ namespace KanSan.ViewModel } public MainWindowViewModel() { - + ServiceProvider = ConfigureServiceProvider(); LadeRegistry(); LoadBaustellenLeistungsverzeichnis(); + ListClients(); @@ -235,6 +241,22 @@ namespace KanSan.ViewModel ListBaustellenCommand = new RelayCommand(paramter => ListBaustellen()); ListObjectsCommand = new RelayCommand(parameter => ListObjekte()); + Mediator.Subscribe("GoTo1Screen", OnGo1Screen); + + } + + private void OnGo1Screen(object obj) + { + ListClients(); + } + + private IServiceProvider ConfigureServiceProvider() + { + IServiceCollection service = new ServiceCollection(); + + service.AddSingleton(); + + return service.BuildServiceProvider(); } private void ListClients() diff --git a/KanSan.ViewModel/Mediator.cs b/KanSan.ViewModel/Mediator.cs new file mode 100644 index 0000000..2283965 --- /dev/null +++ b/KanSan.ViewModel/Mediator.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace KanSan.ViewModel +{ + class Mediator + { + private static IDictionary>> pl_dict = new Dictionary>>(); + public static void Subscribe(string token, Action callback) + { + if(!pl_dict.ContainsKey(token)) + { + var list = new List>(); + list.Add(callback); + pl_dict.Add(token, list); + } + else + { + bool found = false; + foreach(var item in pl_dict[token]) + { + if (item.Method.ToString() == callback.Method.ToString()) + found = true; + } + if (!found) + pl_dict[token].Add(callback); + } + } + + public static void Unsubscribe(string token, Action callback) + { + if (pl_dict.ContainsKey(token)) + pl_dict[token].Remove(callback); + } + public static void Notify(string token, object args = null) + { + if(pl_dict.ContainsKey(token)) + { + foreach (var callback in pl_dict[token]) + callback(args); + } + } + } +} diff --git a/KanSan.ViewModel/Objekte/ObjekteEditViewModel.cs b/KanSan.ViewModel/Objekte/ObjekteEditViewModel.cs index 469bea9..7a6d33c 100644 --- a/KanSan.ViewModel/Objekte/ObjekteEditViewModel.cs +++ b/KanSan.ViewModel/Objekte/ObjekteEditViewModel.cs @@ -5,6 +5,7 @@ using KanSan.Base.Models; using System; using System.Collections.Generic; using System.ComponentModel; +using System.Linq; using System.Text; namespace KanSan.ViewModel @@ -170,6 +171,8 @@ namespace KanSan.ViewModel public void Speichern() { + objekt.PunktOben = getPoint(punktOben, true); + objekt.PunktUnten = getPoint(punktUnten, true); objekt.StrasseName = strassename; objekt.DN = durchmesser; objekt.Haltungslaenge = haltungslaenge; @@ -182,6 +185,29 @@ namespace KanSan.ViewModel unitOfWork.KanaeleRepository.Update(objekt); unitOfWork.Commit(); } - + + private SewerPoint getPoint(string objektnummer, bool createIfNotFound = false) + { + List sewerPoints = unitOfWork.ObjekteRepository.Get(x => x.Objektnummer.Equals(objektnummer)).ToList(); + if (sewerPoints.Count < 1) + { + if (createIfNotFound == false) + return null; + else + { + Guid guidNr = Guid.NewGuid(); + unitOfWork.ObjekteRepository.Update(new SewerPoint() + { + Objektnummer = objektnummer, + GuidNr = guidNr + }); + unitOfWork.Commit(); + + return unitOfWork.ObjekteRepository.Get(x => x.GuidNr.Equals(guidNr)).ToList().First(); + } + } + return sewerPoints.First(); + } + } } diff --git a/KanSan.ViewModel/Objekte/ObjekteListViewModel.cs b/KanSan.ViewModel/Objekte/ObjekteListViewModel.cs index 4a16ee3..4ab9741 100644 --- a/KanSan.ViewModel/Objekte/ObjekteListViewModel.cs +++ b/KanSan.ViewModel/Objekte/ObjekteListViewModel.cs @@ -3,6 +3,7 @@ using KanSan.Base.Interfaces; using KanSan.Base.Interfaces.UI; using KanSan.Base.Models; using KanSan.ViewModel.Commands; +using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Diagnostics; @@ -19,7 +20,17 @@ namespace KanSan.ViewModel } public class ObjekteListViewModel : BaseViewModel { - public ICommand ObjektSelected { get; set; } + private ICommand _objektSelected; + public ICommand ObjektSelected { + get + { + return _objektSelected ?? (_objektSelected = new RelayCommand(x => + { + Mediator.Notify("GoTo1Screen", ""); + })); + } + + } IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext()); @@ -42,20 +53,24 @@ namespace KanSan.ViewModel }).ToList(); kanalObjekte = x; - ObjektSelected = new RelayCommand(SelectObjekt); + //ObjektSelected = new RelayCommand(SelectObjekt); //kanalObjekte = unitOfWork.KanaeleRepository.Get(x => x.Baustelle.Equals(selectedBaustelle)).ToList(); } private void SelectObjekt(object obj) { + + //Debugger.Break(); if (!(obj is Sewer)) return; Sewer sewer = (Sewer)obj; if (sewer == null) return; - - SewerMainWindowViewModel t = new SewerMainWindowViewModel(sewer); + + //MainWindowViewModel.SelectedObjekt = sewer; + /*SewerMainWindowViewModel t = new SewerMainWindowViewModel(sewer); Debugger.Break(); //throw new NotImplementedException(); + */ } public Sewer NeueObjektHinzufügen() diff --git a/KanSan.ViewModel/Schaeden/SchaedenListViewModel.cs b/KanSan.ViewModel/Schaeden/SchaedenListViewModel.cs index 922cff9..cd5a30f 100644 --- a/KanSan.ViewModel/Schaeden/SchaedenListViewModel.cs +++ b/KanSan.ViewModel/Schaeden/SchaedenListViewModel.cs @@ -12,7 +12,7 @@ using System.Text; namespace KanSan.ViewModel { - public class SchaedenListViewModel : ISchaedenListViewModel + public class SchaedenListViewModel : BaseViewModel, ISchaedenListViewModel { private Sewer actualSelectedSewer; IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext()); diff --git a/KanSan.ViewModel/SewerMainWindowViewModel.cs b/KanSan.ViewModel/SewerMainWindowViewModel.cs index ca52b96..30818b1 100644 --- a/KanSan.ViewModel/SewerMainWindowViewModel.cs +++ b/KanSan.ViewModel/SewerMainWindowViewModel.cs @@ -1,9 +1,13 @@ using KanSan.Base.Models; +using KanSan.ViewModel.Commands; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Text; +using System.Windows.Input; namespace KanSan.ViewModel { @@ -12,7 +16,21 @@ namespace KanSan.ViewModel private Sewer model; private SchaedenViewModel schadenViewModel; private Schaeden schaden; - + private BaseViewModel aktualView; + + public BaseViewModel AktualView + { + get + { + return aktualView; + } + set + { + if (aktualView == value) return; + aktualView = value; + OnPropertyChanged(); + } + } public Sewer Objekt { @@ -56,12 +74,30 @@ namespace KanSan.ViewModel } - + public ICommand StammdatenSelect { get; private set; } + public ICommand SchädenübersichtSelect { get; private set; } public SewerMainWindowViewModel(Sewer model) { if (model == null) throw new ArgumentNullException(); this.model = model; + + StammdatenSelect = new RelayCommand(parameter => SelectStammdaten()); + SchädenübersichtSelect = new RelayCommand(parameter => SelectSchädenübersicht()); + + var x = MainWindowViewModel.ServiceProvider.GetService(); + x.ActualViewModel = new ObjekteEditViewModel(model); + + } + + private void SelectSchädenübersicht() + { + AktualView = new SchaedenListViewModel(model); + } + + private void SelectStammdaten() + { + AktualView = new ObjekteEditViewModel(model); } } } diff --git a/KanSan/App.xaml b/KanSan/App.xaml index 95d8c7c..d757c35 100644 --- a/KanSan/App.xaml +++ b/KanSan/App.xaml @@ -3,7 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:syncfusion="http://schemas.syncfusion.com/wpf" xmlns:local="clr-namespace:KanSan" - StartupUri="MainWindow.xaml"> + > diff --git a/KanSan/App.xaml.cs b/KanSan/App.xaml.cs index ed4d4ec..16e84ea 100644 --- a/KanSan/App.xaml.cs +++ b/KanSan/App.xaml.cs @@ -1,4 +1,5 @@ using KanSan.ViewModel; +using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Configuration; @@ -22,6 +23,8 @@ namespace KanSan } + public static IServiceProvider ServiceProvider { get; private set; } + protected override void OnStartup(StartupEventArgs e) { FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata @@ -33,6 +36,23 @@ namespace KanSan { DefaultValue = FindResource(typeof(UserControl)) }); + + ServiceProvider = CreateServiceProvider(); + + Window window = ServiceProvider.GetRequiredService(); + window.Show(); + base.OnStartup(e); + } + + private IServiceProvider CreateServiceProvider() + { + IServiceCollection services = new ServiceCollection(); + services.AddSingleton(); + + services.AddScoped(); + services.AddScoped(s => new MainWindow(s.GetRequiredService())); + + return services.BuildServiceProvider(); } } diff --git a/KanSan/DialogWindowService.cs b/KanSan/DialogWindowService.cs new file mode 100644 index 0000000..bc2a89e --- /dev/null +++ b/KanSan/DialogWindowService.cs @@ -0,0 +1,20 @@ +using KanSan.Base.Interfaces; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Windows; +using System.Windows.Input; + +namespace KanSan +{ + class DialogWindowService: IDialogWindowService + { + public void showWindow(object viewModel) + { + Window win = new Window(); + win.Content = viewModel; + win.Show(); + } + } +} diff --git a/KanSan/MainWindow.xaml.cs b/KanSan/MainWindow.xaml.cs index 2d06fad..b58f0de 100644 --- a/KanSan/MainWindow.xaml.cs +++ b/KanSan/MainWindow.xaml.cs @@ -36,52 +36,19 @@ namespace KanSan UI.UCLeistungsverzeichnisPositionenBaustelle UCLeistungsverzeichnisPositionenBaustelle; UI.UCLeistungsverzeichnisPosList UCLeistungsverzeichnisPosList; - public MainWindow() + public MainWindow(object dataContext) { InitializeComponent(); - - this.DataContext = new MainWindowViewModel(); - (this.DataContext as MainWindowViewModel).GenerateExcelFile(); + + DataContext = dataContext; + //(this.DataContext as MainWindowViewModel).GenerateExcelFile(); #if DEBUG System.Diagnostics.PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Critical; #endif } - private void UCProjektList_ProjektAdded(object sender, UI.SelectProjektEventArgs e) - { - if (e.projekt == null) return; - UI.UCProjektEdit uCProjektEdit = new UI.UCProjektEdit(e.projekt); - ContentController.Content = uCProjektEdit; - } - private void UCProjektList_ProjektSelected(object sender, UI.SelectProjektEventArgs e) - { - (DataContext as MainWindowViewModel).SelectedProjekt = e.projekt; - } - - private void UCKundeList_KundeSelect(object sender, UI.KundeAddedKlickEventArgs e) - { - (DataContext as MainWindowViewModel).SelectedKunde = e.kunde; - } - - private void UCKundeList_KundeAdded(object sender, UI.KundeAddedKlickEventArgs e) - { - UCKundeEdit = new UI.UCKundeEdit(e.kunde); - UCKundeEdit.SpeichernClicked += Edit_SpeichernClicked; - ContentController.Content = UCKundeEdit; - } - - - - private void UCProjektList_ProjektEdited(object sender, UI.SelectProjektEventArgs e) - { - if (e.projekt == null) return; - UI.UCProjektEdit uCProjektEdit = new UI.UCProjektEdit(e.projekt); - - uCProjektEdit.SpeichernClicked += Edit_SpeichernClicked; - ContentController.Content = uCProjektEdit; - } private void Edit_SpeichernClicked(object sender, EventArgs e) { @@ -89,42 +56,6 @@ namespace KanSan } - private void UCBaustelleList_BaustelleSelected(object sender, UI.SelectBaustelleEventArgs e) - { - (DataContext as MainWindowViewModel).SelectedBaustelle = e.baustelle; - } - - private void UCBaustelleList_BaustelleEdited(object sender, UI.SelectBaustelleEventArgs e) - { - if (e.baustelle == null) return; - UI.UCBaustelleEdit uCBaustelleEdit = new UI.UCBaustelleEdit(e.baustelle); - - uCBaustelleEdit.SpeichernClicked += Edit_SpeichernClicked; - ContentController.Content = uCBaustelleEdit; - - } - - private void UCBaustelleList_BaustelleAdded(object sender, UI.SelectBaustelleEventArgs e) - { - if (e.baustelle == null) return; - UI.UCBaustelleEdit uBaustelleEdit = new UI.UCBaustelleEdit(e.baustelle); - uBaustelleEdit.SpeichernClicked += Edit_SpeichernClicked; - ContentController.Content = uBaustelleEdit; - } - - - private void UCObjekteList_ObjektSelected(object sender, UI.ObjektSelectEventArgs e) - { - if (e.Objekt == null) return; - (DataContext as MainWindowViewModel).SelectedObjekt = e.Objekt; - rbObjekte.IsChecked = false; - - uCSewerMainMenu = new UI.UCSewerMainMenu(e.Objekt); - - ContentController.Content = uCSewerMainMenu; - - } - private void rbLeistungsverzeichnis_Checked(object sender, RoutedEventArgs e) { diff --git a/KanSan/UI/Objekte/UCObjektEdit.xaml b/KanSan/UI/Objekte/UCObjektEdit.xaml index 84b06d5..61f94e1 100644 --- a/KanSan/UI/Objekte/UCObjektEdit.xaml +++ b/KanSan/UI/Objekte/UCObjektEdit.xaml @@ -28,7 +28,7 @@ -