Compare commits

5 Commits

Author SHA1 Message Date
HuskyTeufel
97fdc31e21 Projekt kann nun Selectiert werden 2021-08-31 13:56:13 +02:00
HuskyTeufel
ade84e30e3 Projekte integration angefangen 2021-08-31 13:31:52 +02:00
HuskyTeufel
c66751ddc5 Kundenedit hinzugefügt
Neue Kunden werden gleich zur Editseite weitergeleitet

Kunden können gelöscht werden
2021-08-31 12:25:27 +02:00
Husky
7911a44f2f Umbau 2020-07-15 17:18:52 +02:00
Husky
3e9a353fc0 Umbau angefangen auf ICommand 2020-07-12 19:32:14 +02:00
51 changed files with 762 additions and 349 deletions

View File

@@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace KanSan.Base.Interfaces
{
public interface IDialogWindowService
{
void showWindow(object viewModel);
}
}

View File

@@ -21,7 +21,7 @@ namespace KanSan.Base
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql("Host = localhost; Database = kanSan; Username = kansan; Password = kansan");
optionsBuilder.UseNpgsql("Host = 192.168.122.1; Database = kanSan; Username = kansan; Password = kansan");
//optionsBuilder.UseSqlite("Data Source=kansan.db");
}
}

View File

@@ -0,0 +1,10 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace KanSan.Base
{
class WindowService
{
}
}

View File

@@ -1,16 +1,18 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Text;
namespace KanSan.ViewModel
{
public class PropertyChangedClass
public class BaseViewModel
{
public event PropertyChangedEventHandler PropertyChanged;
protected internal void OnPropertyChanged([CallerMemberName] string propertyname = null)
{
Trace.WriteLine("OnPropertyChanged ()" + propertyname);
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
}

View File

@@ -9,7 +9,7 @@ using System.Text;
namespace KanSan.ViewModel
{
public class BaustelleEditViewModel : PropertyChangedClass, INotifyPropertyChanged, IBaustelleEditViewModel
public class BaustelleEditViewModel : BaseViewModel, INotifyPropertyChanged, IBaustelleEditViewModel
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());
private Baustelle baustelle;

View File

@@ -9,7 +9,7 @@ using System.Text;
namespace KanSan.ViewModel
{
public class BaustellenListViewModel : IBaustelleListViewModel
public class BaustellenListViewModel :BaseViewModel, IBaustelleListViewModel
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());
private List<Baustelle> baustellen;

View File

@@ -0,0 +1,32 @@
using Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.Mapping;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Input;
namespace KanSan.ViewModel.Commands
{
public class RelayCommand : ICommand
{
private Action<object> execute;
private Func<object, bool> canExecute;
public event EventHandler CanExecuteChanged;
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
this.execute = execute;
this.canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return this.canExecute == null || this.canExecute(parameter);
}
public void Execute(object parameter)
{
this.execute(parameter);
}
}
}

View File

@@ -1,15 +1,18 @@
using KanSan.Base;
using KanSan.Base.Interfaces;
using KanSan.Base.Models;
using KanSan.ViewModel.Commands;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Input;
namespace KanSan.ViewModel
{
public class KundenEditViewModel : PropertyChangedClass, INotifyPropertyChanged
public class KundenEditViewModel : BaseViewModel, INotifyPropertyChanged
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());
@@ -20,6 +23,9 @@ namespace KanSan.ViewModel
private string plz;
private string ort;
public ICommand SaveClient { get; set; }
public ICommand RemoveClient { get; set; }
#region getters
public string Vorname
{
@@ -88,22 +94,30 @@ namespace KanSan.ViewModel
}
#endregion
public KundenEditViewModel(Kunde kunde = null)
public KundenEditViewModel(Kunde kunde)
{
if (kunde == null)
_kunde = unitOfWork.KundenRepository.Get().First();
else
_kunde = kunde;
_kunde = kunde;
vorname = _kunde.Vorname;
nachname = _kunde.Nachname;
strasse = _kunde.Strasse;
plz = _kunde.PLZ;
ort = _kunde.Ort;
SaveClient = new RelayCommand(parameter => Speichern());
RemoveClient = new RelayCommand(parameter => Remove());
}
public void Speichern()
private void Remove()
{
unitOfWork.KundenRepository.Delete(_kunde);
unitOfWork.Commit();
Mediator.Notify("GoToListClientScreen");
}
private void Speichern()
{
Trace.WriteLine("Speichere");
_kunde.Vorname = Vorname;
_kunde.Nachname = Nachname;
_kunde.Strasse = Strasse;
@@ -112,6 +126,7 @@ namespace KanSan.ViewModel
unitOfWork.KundenRepository.Update(_kunde);
unitOfWork.Commit();
Mediator.Notify("GoToListClientScreen");
}
}
}

View File

@@ -2,19 +2,33 @@
using KanSan.Base.Interfaces;
using KanSan.Base.Interfaces.UI;
using KanSan.Base.Models;
using KanSan.ViewModel.Commands;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Input;
namespace KanSan.ViewModel
{
public class KundenListViewModel : IKundenListViewModel
public class KundenListViewModel : BaseViewModel, IKundenListViewModel
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());
private List<Kunde> kunden;
private Kunde selectedKunde;
public Kunde SelectedKunde {
get { return selectedKunde; }
set {
selectedKunde = value;
}
}
public ICommand AddNewClientCommand { get; set; }
public ICommand EditClientCommand { get; set; }
public ICommand SelectClientCommand { get; set; }
public List<Kunde> Kunden
{
get
@@ -26,22 +40,41 @@ namespace KanSan.ViewModel
public KundenListViewModel()
{
kunden = unitOfWork.KundenRepository.Get().ToList();
AddNewClientCommand = new RelayCommand(parameter => NewClient());
EditClientCommand = new RelayCommand(parameter => EditClient());
SelectClientCommand = new RelayCommand(parameter => SelectClient());
}
public Kunde NeueKunde()
private void SelectClient()
{
Kunde result = new Kunde();
//result.ID = 1;
result.GuidNr = Guid.NewGuid();
if (selectedKunde == null) return;
Mediator.Notify("ClientSelected", selectedKunde);
}
private void NewClient()
{
Kunde newClient = NeueKunde();
Mediator.Notify("GoToEditClientScreen", newClient);
}
private void EditClient()
{
if (SelectedKunde == null) return;
Mediator.Notify("GoToEditClientScreen",selectedKunde);
}
private Kunde NeueKunde()
{
Kunde result = new Kunde()
{
GuidNr = Guid.NewGuid()
};
unitOfWork.KundenRepository.Insert(result);
unitOfWork.Commit();
return result;
//IEnumerable<Kunde> kunden = unitOfWork.KundenRepository.Get(d => d.GuidNr.Equals(result.GuidNr));
//if (kunden.Count() < 1)
// throw new Exception("Kunde konnte nicht gefunden werden");
//return kunden.First();
}
}
}

View File

@@ -27,7 +27,7 @@ namespace KanSan.ViewModel
public string Tag { get => tag; set => tag = value; }
public bool IsActiveInBaustelle { get => isActiveInBaustelle; set => isActiveInBaustelle = value; }
}
public class LeistungsverzeichnisBaustelleViewModel : PropertyChangedClass, INotifyPropertyChanged, ILeistungsverzeichnisBaustelleViewModel
public class LeistungsverzeichnisBaustelleViewModel : BaseViewModel, INotifyPropertyChanged, ILeistungsverzeichnisBaustelleViewModel
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());

View File

@@ -10,7 +10,7 @@ using System.Text;
namespace KanSan.ViewModel
{
public class LeistungsverzeichnisPositionenListViewModel :PropertyChangedClass, INotifyPropertyChanged, ILeistungsverzeichnisPositionListViewModel
public class LeistungsverzeichnisPositionenListViewModel :BaseViewModel, INotifyPropertyChanged, ILeistungsverzeichnisPositionListViewModel
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());
List<LeistungsverzeichnisPosition> lvPositionen;

View File

@@ -9,7 +9,7 @@ using System.Text;
namespace KanSan.ViewModel
{
public class LeistungsverzeichnisPositionViewModel : PropertyChangedClass, INotifyPropertyChanged, ILeistungsverzeichnisPositionViewModel
public class LeistungsverzeichnisPositionViewModel : BaseViewModel, INotifyPropertyChanged, ILeistungsverzeichnisPositionViewModel
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());

View File

@@ -1,6 +1,8 @@
using KanSan.Base;
using KanSan.Base.Interfaces;
using KanSan.Base.Models;
using KanSan.ViewModel.Commands;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Win32;
using Syncfusion.XlsIO;
using System;
@@ -10,13 +12,19 @@ using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Windows.Input;
namespace KanSan.ViewModel
{
public class MainWindowViewModel : PropertyChangedClass, INotifyPropertyChanged
public class MainWindowViewModel : BaseViewModel, INotifyPropertyChanged
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());
BaseViewModel actualViewModel;
RegistryKey registry;
const string REGISTRYKEY = "HKEY_CURRENT_USER\\Software\\Cosysda\\KanSan";
@@ -26,7 +34,34 @@ namespace KanSan.ViewModel
private Sewer _selectedObjekt;
public static Baustelle Baustelle;
//public static Sewer SelectedObjekt;
public static List<LeistungsverzeichnisPosition> LVPositionen = null;
public static IServiceProvider ServiceProvider { get; private set; }
public ICommand ListClientsCommand { get; set; }
public ICommand ListProjectsCommand { get; set; }
public ICommand ListBaustellenCommand { get; set; }
public ICommand ListObjectsCommand { get; set; }
public ICommand ShowLeistungsverzeichnisCommand { get; set; }
public ICommand SelectLeistungsverzeichnisBaustelleCommand { get; set; }
public BaseViewModel ActualViewModel
{
get
{
return actualViewModel;
//return actualViewModel;
}
set
{
if (actualViewModel == value) return;
Trace.WriteLine("AktualView Geändert zu " + value);
actualViewModel = value;
OnPropertyChanged();
}
}
public string ApplicationTitle
@@ -113,6 +148,7 @@ namespace KanSan.ViewModel
}
}
public Sewer SelectedObjekt
{
get
@@ -129,6 +165,7 @@ namespace KanSan.ViewModel
OnPropertyChanged();
}
}
private void SaveInRegistry(string key, string value)
{
Registry.SetValue(REGISTRYKEY, key, value);
@@ -184,10 +221,107 @@ namespace KanSan.ViewModel
Registry.CurrentUser.CreateSubKey("Software\\Cosysda\\KanSan");
LadeRegistry();
}
public void init()
{
}
public MainWindowViewModel()
{
ServiceProvider = ConfigureServiceProvider();
LadeRegistry();
LoadBaustellenLeistungsverzeichnis();
ListClients();
ListClientsCommand = new RelayCommand(parmater => ListClients());
ListProjectsCommand = new RelayCommand(parameter => ListProjekte());
ListBaustellenCommand = new RelayCommand(paramter => ListBaustellen());
ListObjectsCommand = new RelayCommand(parameter => ListObjekte());
Mediator.Subscribe("GoToListClientScreen", OnGoToListClientScreen);
Mediator.Subscribe("GoToEditClientScreen", OnGoToEditClientScreen);
Mediator.Subscribe("ClientSelected", OnSelectedClient);
Mediator.Subscribe("GoToListProjektScreen", OnGoToListProjektScreen);
Mediator.Subscribe("GoToEditProjektScreen", OnGoToEditProjektScreen);
Mediator.Subscribe("ProjektSelected", OnSelectedProjekt);
}
private void OnSelectedProjekt(object obj)
{
if (!(obj is Projekt)) return;
SelectedProjekt = (obj as Projekt);
ListBaustellen();
}
private void OnGoToListProjektScreen(object obj)
{
ListProjekte();
}
private void OnGoToEditProjektScreen(object obj)
{
if (!(obj is Projekt)) return;
ActualViewModel = new ProjektEditViewModel((obj as Projekt));
}
private void OnSelectedClient(object obj)
{
if (!(obj is Kunde)) return;
SelectedKunde = (obj as Kunde);
ListProjekte();
}
private void OnGoToEditClientScreen(object obj)
{
if (!(obj is Kunde)) return;
Kunde client = (obj as Kunde);
EditClient(client);
}
private void OnGoToListClientScreen(object obj)
{
ListClients();
}
private IServiceProvider ConfigureServiceProvider()
{
IServiceCollection service = new ServiceCollection();
service.AddSingleton<MainWindowViewModel>();
return service.BuildServiceProvider();
}
private void ListClients()
{
ActualViewModel = new KundenListViewModel();
}
private void EditClient(Kunde client)
{
ActualViewModel = new KundenEditViewModel(client);
}
private void ListProjekte()
{
if (SelectedKunde == null)
ActualViewModel = new KundenListViewModel();
else
ActualViewModel = new ProjektListViewModel(SelectedKunde);
}
private void ListBaustellen()
{
ActualViewModel = new BaustellenListViewModel(SelectedProjekt);
}
private void ListObjekte()
{
ActualViewModel = new ObjekteListViewModel(SelectedBaustelle);
}
public void GenerateExcelFile()

View File

@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace KanSan.ViewModel
{
class Mediator
{
private static IDictionary<string, List<Action<object>>> pl_dict = new Dictionary<string, List<Action<object>>>();
public static void Subscribe(string token, Action<object> callback)
{
if(!pl_dict.ContainsKey(token))
{
var list = new List<Action<object>>();
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<object> 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);
}
}
}
}

View File

@@ -5,11 +5,12 @@ using KanSan.Base.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace KanSan.ViewModel
{
public class ObjekteEditViewModel : PropertyChangedClass,IObjekteEditViewModel, INotifyPropertyChanged
public class ObjekteEditViewModel : BaseViewModel,IObjekteEditViewModel, INotifyPropertyChanged
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());
string strassename;
@@ -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<SewerPoint> 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();
}
}
}

View File

@@ -2,10 +2,14 @@
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;
using System.Linq;
using System.Text;
using System.Windows.Input;
namespace KanSan.ViewModel
{
@@ -14,8 +18,20 @@ namespace KanSan.ViewModel
public string Strassename { get; set; }
public IEnumerable<Sewer> Objekte { get; set; }
}
public class ObjekteListViewModel
public class ObjekteListViewModel : BaseViewModel
{
private ICommand _objektSelected;
public ICommand ObjektSelected {
get
{
return _objektSelected ?? (_objektSelected = new RelayCommand(x =>
{
Mediator.Notify("GoTo1Screen", "");
}));
}
}
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());
List<ObjekteTransfer> kanalObjekte = new List<ObjekteTransfer>();
@@ -37,9 +53,26 @@ namespace KanSan.ViewModel
}).ToList();
kanalObjekte = x;
//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;
//MainWindowViewModel.SelectedObjekt = sewer;
/*SewerMainWindowViewModel t = new SewerMainWindowViewModel(sewer);
Debugger.Break();
//throw new NotImplementedException();
*/
}
public Sewer NeueObjektHinzufügen()
{
Guid guid = Guid.NewGuid();

View File

@@ -2,16 +2,20 @@
using KanSan.Base.Interfaces;
using KanSan.Base.Interfaces.UI;
using KanSan.Base.Models;
using KanSan.ViewModel.Commands;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Windows.Input;
namespace KanSan.ViewModel
{
public class ProjektEditViewModel : PropertyChangedClass,INotifyPropertyChanged, IProjektEditViewModel
public class ProjektEditViewModel : BaseViewModel,INotifyPropertyChanged, IProjektEditViewModel
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());
public ICommand SaveProjekt { get; set; }
public ICommand RemoveProjekt { get; set; }
private Projekt projekt;
string projektnummer;
string ort;
@@ -41,6 +45,7 @@ namespace KanSan.ViewModel
this.projekt = projekt;
projektnummer = projekt.Projektnummer;
ort = projekt.Ort;
SaveProjekt = new RelayCommand(parameter => Speichern());
}
public void Speichern()
@@ -49,6 +54,7 @@ namespace KanSan.ViewModel
projekt.Projektnummer = Projektnummer;
unitOfWork.ProjekteRepository.Update(projekt);
unitOfWork.Commit();
Mediator.Notify("GoToListProjektScreen");
}
}
}

View File

@@ -2,14 +2,17 @@
using KanSan.Base.Interfaces;
using KanSan.Base.Interfaces.UI;
using KanSan.Base.Models;
using KanSan.ViewModel.Commands;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Input;
namespace KanSan.ViewModel
{
public class ProjektListViewModel : IProjektListViewModel
public class ProjektListViewModel : BaseViewModel, IProjektListViewModel
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());
private List<Projekt> projektevonKunde;
@@ -22,26 +25,45 @@ namespace KanSan.ViewModel
}
private Kunde selectedKunde;
public ICommand NewProjekt { get; set; }
public ICommand EditProjekt { get; set; }
public ICommand SelectProjekt { get; set; }
public Projekt SelectedProjekt { get; set; }
public ProjektListViewModel(Kunde client)
{
this.selectedKunde = client;
projektevonKunde = unitOfWork.ProjekteRepository.Get(x => x.Kunde.Equals(client)).ToList();
SelectProjekt = new RelayCommand(parameter => SelectActualProjekt());
EditProjekt = new RelayCommand(parameter => EditSelectedProjekt());
NewProjekt = new RelayCommand(parameter => AddNewProjekt());
}
public void SelectProjekt()
private void SelectActualProjekt()
{
if (SelectedProjekt == null) return;
Mediator.Notify("ProjektSelected", SelectedProjekt);
}
private void AddNewProjekt()
{
Projekt newProj = NeueProjekt();
Mediator.Notify("GoToEditProjektScreen", newProj);
}
private void EditSelectedProjekt()
{
Mediator.Notify("GoToEditProjektScreen", SelectedProjekt);
}
public Projekt NeueProjekt()
{
Guid guid = Guid.NewGuid();
Projekt newProjekt = new Projekt()
{
GuidNr = guid,
GuidNr = Guid.NewGuid(),
Kunde = selectedKunde
};
@@ -49,9 +71,7 @@ namespace KanSan.ViewModel
//unitOfWork.ProjekteRepository.Insert(newProjekt);
unitOfWork.Commit();
List<Projekt> res = unitOfWork.ProjekteRepository.Get(x => x.GuidNr.Equals(guid)).ToList();
if (res.Count < 1) throw new Exception("Der zuvor eingefügte Projekt konnte nicht in der Datenbank gefunden werden");
return res.First();
return newProjekt;
}
}
}

View File

@@ -10,7 +10,7 @@ using System.Text;
namespace KanSan.ViewModel
{
public class ProjektViewModel : PropertyChangedClass,INotifyPropertyChanged
public class ProjektViewModel : BaseViewModel,INotifyPropertyChanged
{
private Projekt _baustelle;
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());

View File

@@ -11,7 +11,7 @@ using System.Text;
namespace KanSan.ViewModel
{
public class SchaedenEditViewModel : PropertyChangedClass, INotifyPropertyChanged, ISchaedenEditViewModel
public class SchaedenEditViewModel : BaseViewModel, INotifyPropertyChanged, ISchaedenEditViewModel
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());
decimal entfernung;

View File

@@ -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());

View File

@@ -1,18 +1,36 @@
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
{
public class SewerMainMenuViewModel : PropertyChangedClass,INotifyPropertyChanged
public class SewerMainWindowViewModel : BaseViewModel,INotifyPropertyChanged
{
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 SewerMainMenuViewModel(Sewer model)
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<MainWindowViewModel>();
x.ActualViewModel = new ObjekteEditViewModel(model);
}
private void SelectSchädenübersicht()
{
AktualView = new SchaedenListViewModel(model);
}
private void SelectStammdaten()
{
AktualView = new ObjekteEditViewModel(model);
}
}
}

View File

@@ -10,7 +10,7 @@ using System.Text;
namespace KanSan.ViewModel
{
public class TaetigkeitEditViewModel : PropertyChangedClass, INotifyPropertyChanged, ITaetigkeitEditViewModel
public class TaetigkeitEditViewModel : BaseViewModel, INotifyPropertyChanged, ITaetigkeitEditViewModel
{
IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext());
Fahrzeug fahrzeug;

View File

@@ -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">
>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>

View File

@@ -1,4 +1,6 @@
using System;
using KanSan.ViewModel;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
@@ -17,9 +19,12 @@ namespace KanSan
public App()
{
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("MjM0MjUzQDMxMzgyZTMxMmUzMG8wTDNQcm5mN3UxaU9MbjdkVUlQbDgzWHcvUXZCOHdaVVY3c2I5S3BvN0U9");
}
public static IServiceProvider ServiceProvider { get; private set; }
protected override void OnStartup(StartupEventArgs e)
{
FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata
@@ -31,6 +36,23 @@ namespace KanSan
{
DefaultValue = FindResource(typeof(UserControl))
});
ServiceProvider = CreateServiceProvider();
Window window = ServiceProvider.GetRequiredService<MainWindow>();
window.Show();
base.OnStartup(e);
}
private IServiceProvider CreateServiceProvider()
{
IServiceCollection services = new ServiceCollection();
services.AddSingleton<SewerMainWindowViewModel>();
services.AddScoped<MainWindowViewModel>();
services.AddScoped<MainWindow>(s => new MainWindow(s.GetRequiredService<MainWindowViewModel>()));
return services.BuildServiceProvider();
}
}

View File

@@ -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();
}
}
}

View File

@@ -61,9 +61,15 @@
<Compile Update="UI\Güteschutz\UCGüteschutzBerichtEdit.xaml.cs">
<SubType>Code</SubType>
</Compile>
<Compile Update="UI\SewerMainWindow.xaml.cs">
<SubType>Code</SubType>
</Compile>
<Compile Update="UI\UCHarzSanierung.xaml.cs">
<SubType>Code</SubType>
</Compile>
<Compile Update="UI\SanMaßnahmen\UCSanierungOverview.xaml.cs">
<SubType>Code</SubType>
</Compile>
<Compile Update="UI\UCSewerMainWindow.xaml.cs">
<SubType>Code</SubType>
</Compile>
@@ -138,9 +144,15 @@
<Page Update="UI\Güteschutz\UCGüteschutzBerichtEdit.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="UI\SewerMainWindow.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="UI\UCHarzSanierung.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="UI\SanMaßnahmen\UCSanierungOverview.xaml">
<SubType>Designer</SubType>
</Page>
<Page Update="UI\UCSewerMainWindow.xaml">
<SubType>Designer</SubType>
</Page>

View File

@@ -3,6 +3,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:KanSan"
xmlns:syncfusion="clr-namespace:Syncfusion.Windows.Shared;assembly=Syncfusion.Shared.WPF" x:Class="KanSan.MainWindow"
TitleTextAlignment="Center" TitleBarBackground="BlueViolet"
@@ -17,6 +18,7 @@
<ResourceDictionary Source="./my_controls.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
@@ -36,10 +38,10 @@
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Grid.ColumnSpan="2">
<RadioButton Name="rbKunden" Content="Kunden" Style="{StaticResource ToggelButtonList}" Checked="rbKunden_Checked" />
<RadioButton Name="rbProjekte" Content="Projekte" Style="{StaticResource ToggelButtonList}" Checked="rbProjekte_Checked" />
<RadioButton Name="rbBaustellen" Content="Baustellen" Style="{StaticResource ToggelButtonList}" Checked="rbBaustellen_Checked" />
<RadioButton x:Name="rbObjekte" Content="Objekte" Style="{StaticResource ToggelButtonList}" Checked="rbObjekte_Checked" />
<RadioButton Name="rbKunden" Content="Kunden" Style="{StaticResource ToggelButtonList}" Command="{Binding ListClientsCommand}" />
<RadioButton Name="rbProjekte" Content="Projekte" Style="{StaticResource ToggelButtonList}" Command="{Binding ListProjectsCommand}" />
<RadioButton Name="rbBaustellen" Content="Baustellen" Style="{StaticResource ToggelButtonList}" Command="{Binding ListBaustellenCommand}" />
<RadioButton x:Name="rbObjekte" Content="Objekte" Style="{StaticResource ToggelButtonList}" Command="{Binding ListObjectsCommand}" />
</StackPanel>
<Line Grid.Row="1" Stroke="Black" Width="auto" Height="4" StrokeThickness="20" Fill="Black" Stretch="Fill" X1="9" X2="10" />
<StackPanel Grid.Row="2">
@@ -48,7 +50,7 @@
<RadioButton Name="Test" Checked="Test_Checked" Content="Test" Style="{StaticResource ToggelButtonList}" />
</StackPanel>
</Grid>
<ContentControl Grid.Column="1" Name="ContentController" Content="KanSan"/>
<ContentControl Grid.Column="1" Name="ContentController" Content="{Binding ActualViewModel}"/>
<StatusBar Grid.ColumnSpan="2" Margin="0,1,0,0" Grid.Row="1">
<StatusBarItem Content="{Binding SelectedKunde.Vorname}" />
<StatusBarItem Content="{Binding SelectedProjekt.Projektnummer}" />

View File

@@ -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,87 +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 rbKunden_Checked(object sender, RoutedEventArgs e)
{
rbLeistungsverzeichnis.IsChecked = false;
rbLeistungsverzeichnisBaustellen.IsChecked = false;
UCKundeList = new UI.UCKundeList();
UCKundeList.KundeAdded += UCKundeList_KundeAdded;
UCKundeList.KundeSelect += UCKundeList_KundeSelect;
ContentController.Content = UCKundeList;
}
private void rbProjekte_Checked(object sender, RoutedEventArgs e)
{
rbLeistungsverzeichnis.IsChecked = false;
rbLeistungsverzeichnisBaustellen.IsChecked = false;
Kunde client = (DataContext as MainWindowViewModel).SelectedKunde;
if (client == null) return;
UCProjektList = new UI.UCProjektList(client);
UCProjektList.ProjektSelected += UCProjektList_ProjektSelected;
UCProjektList.ProjektAdded += UCProjektList_ProjektAdded;
UCProjektList.ProjektEdited += UCProjektList_ProjektEdited;
ContentController.Content = UCProjektList;
}
private void rbBaustellen_Checked(object sender, RoutedEventArgs e)
{
rbLeistungsverzeichnis.IsChecked = false;
rbLeistungsverzeichnisBaustellen.IsChecked = false;
Projekt projekt = (DataContext as MainWindowViewModel).SelectedProjekt;
if (projekt == null) return;
UCBaustelleList = new UI.UCBaustelleList(projekt);
UCBaustelleList.BaustelleAdded += UCBaustelleList_BaustelleAdded;
UCBaustelleList.BaustelleEdited += UCBaustelleList_BaustelleEdited;
UCBaustelleList.BaustelleSelected += UCBaustelleList_BaustelleSelected;
ContentController.Content = UCBaustelleList;
}
private void rbObjekte_Checked(object sender, RoutedEventArgs e)
{
rbLeistungsverzeichnis.IsChecked = false;
rbLeistungsverzeichnisBaustellen.IsChecked = false;
rbObjekte.IsChecked = true;
UI.UCObjekteList uCObjekteList = new UI.UCObjekteList((DataContext as MainWindowViewModel).SelectedBaustelle);
uCObjekteList.ObjektSelected += UCObjekteList_ObjektSelected;
ContentController.Content = uCObjekteList;
}
private void rbLeistungsverzeichnis_Checked(object sender, RoutedEventArgs e)
{

View File

@@ -23,6 +23,11 @@ namespace KanSan.UI
public event EventHandler<SelectBaustelleEventArgs> BaustelleSelected;
public event EventHandler<SelectBaustelleEventArgs> BaustelleAdded;
public event EventHandler<SelectBaustelleEventArgs> BaustelleEdited;
public UCBaustelleList()
{
InitializeComponent();
}
public UCBaustelleList(Projekt projekt)
{
InitializeComponent();

View File

@@ -14,6 +14,7 @@
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
@@ -26,7 +27,8 @@
<Label Grid.Column="0" Grid.Row="3">Plz</Label>
<Label Grid.Column="0" Grid.Row="4">Ort</Label>
<Button Name="Speichern" Content="Speichern" Grid.Row="5" Grid.ColumnSpan="2" Click="Speichern_Click" />
<Button Name="Speichern" Content="Speichern" Grid.Row="5" Grid.ColumnSpan="2" Command="{Binding SaveClient}" />
<Button Content="Löschen" Grid.Row="6" Grid.ColumnSpan="2" Command="{Binding RemoveClient}" />
<TextBox Grid.Column="1" Grid.Row="0" Text="{Binding Vorname}" />
<TextBox Grid.Column="1" Grid.Row="1" Text="{Binding Nachname}" />

View File

@@ -22,30 +22,9 @@ namespace KanSan.UI
/// </summary>
public partial class UCKundeEdit : UserControl
{
public event EventHandler SpeichernClicked;
protected virtual void OnSpeichernKlicked(EventArgs e)
{
EventHandler handler = SpeichernClicked;
if (handler != null)
handler(this, e);
}
//private Kunde kunde = null;
//private UnitOfWork unitOfWork = null;
public UCKundeEdit(Kunde kunde = null)
public UCKundeEdit()
{
InitializeComponent();
this.DataContext = new KundenEditViewModel(kunde);
}
private void Speichern_Click(object sender, RoutedEventArgs e)
{
((KundenEditViewModel)DataContext).Speichern();
OnSpeichernKlicked(EventArgs.Empty);
}
}
}

View File

@@ -17,16 +17,16 @@
<RowDefinition Height="50"/>
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<DataGrid AutoGenerateColumns="False" SelectionMode="Single" ItemsSource="{Binding Kunden}" Name="dgKundenList">
<DataGrid IsReadOnly="True" AutoGenerateColumns="False" SelectionMode="Single" SelectedItem="{Binding SelectedKunde, Mode=TwoWay}" ItemsSource="{Binding Kunden}" Name="dgKundenList">
<DataGrid.Columns>
<DataGridTextColumn Header="Vorname" Binding="{Binding Vorname}" />
<DataGridTextColumn Header="Nachname" Binding="{Binding Nachname}" />
<DataGridTextColumn Header="Ort" Binding="{Binding Ort}" />
</DataGrid.Columns>
</DataGrid>
<Button Grid.Row="1" Name="SelectKunde" Content="Kunde Auswählen" Click="SelectKunde_Click" />
<Button Grid.Row="2" Name="EditKunde" Content="Kunde Editieren" Click="EditKunde_Click" />
<Button Grid.Row="3" Name="NeueKunde" Content="Neue Kunde anlegen" Click="NeueKunde_Click" />
<Button Grid.Row="1" Name="SelectKunde" Content="Kunde Auswählen" Command="{Binding SelectClientCommand}" />
<Button Grid.Row="2" Name="EditKunde" Content="Kunde Editieren" Command="{Binding EditClientCommand}" />
<Button Grid.Row="3" Name="NeueKunde" Content="Neue Kunde anlegen" Command="{Binding AddNewClientCommand}" />
</Grid>
</UserControl>

View File

@@ -21,54 +21,10 @@ namespace KanSan.UI
/// </summary>
public partial class UCKundeList : UserControl
{
public event EventHandler<KundeAddedKlickEventArgs> KundeAdded;
public event EventHandler<KundeAddedKlickEventArgs> KundeSelect;
public UCKundeList()
{
InitializeComponent();
this.DataContext = new KundenListViewModel();
}
private void NeueKunde_Click(object sender, RoutedEventArgs e)
{
KundeAddedKlickEventArgs args = new KundeAddedKlickEventArgs();
args.kunde = (DataContext as KundenListViewModel).NeueKunde();
OnClickKundeAdded(args);
}
protected virtual void OnClickKundeAdded(KundeAddedKlickEventArgs e)
{
EventHandler<KundeAddedKlickEventArgs> handler = KundeAdded;
if (handler != null)
handler(this, e);
}
protected virtual void OnClickSelectedKunde(KundeAddedKlickEventArgs e)
{
EventHandler<KundeAddedKlickEventArgs> handler = KundeSelect;
if (handler != null)
handler(this, e);
}
private void EditKunde_Click(object sender, RoutedEventArgs e)
{
Kunde selectedKunde = (dgKundenList.SelectedItem as Kunde);
if (selectedKunde == null) return;
OnClickKundeAdded(new KundeAddedKlickEventArgs() { kunde = selectedKunde });
}
private void SelectKunde_Click(object sender, RoutedEventArgs e)
{
Kunde selectedKunde = (dgKundenList.SelectedItem as Kunde);
if (selectedKunde == null) return;
OnClickSelectedKunde(new KundeAddedKlickEventArgs() { kunde = selectedKunde });
}
}
public class KundeAddedKlickEventArgs : EventArgs
{
public Kunde kunde { get; set; }
}
}

View File

@@ -28,7 +28,7 @@
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Content="Speichern" Name="Speichern" Click="Speichern_Click"/>
<Button Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Content="Speichern" Name="Speichern" />
<StackPanel Grid.Column="1">
<CheckBox Content="Rohrleitung in Betrieb" IsChecked="{Binding Path=(iself:IObjekteEditViewModel.RohrleitungInBetrieb)}" Style="{StaticResource checkBoxCircle}"/>
<CheckBox Content="Wasserhaltung durchgeführt" IsChecked="{Binding Path=(iself:IObjekteEditViewModel.WasserHaltungDurchgefuehrt)}" Style="{StaticResource checkBoxCircle}" />

View File

@@ -20,15 +20,10 @@ namespace KanSan.UI
/// </summary>
public partial class UCObjektEdit : UserControl
{
public UCObjektEdit(Sewer objekt)
public UCObjektEdit()
{
InitializeComponent();
this.DataContext = new ObjekteEditViewModel(objekt);
}
private void Speichern_Click(object sender, RoutedEventArgs e)
{
(DataContext as ObjekteEditViewModel).Speichern();
}
}
}

View File

@@ -19,7 +19,8 @@
<RowDefinition Height="50" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<TreeView Name="trvItems" ItemsSource="{Binding KanalObjekte}" MouseDoubleClick="trvItems_MouseDoubleClick">
<TreeView Name="trvItems" ItemsSource="{Binding KanalObjekte}" MouseDoubleClick="trvItems_MouseDoubleClick" >
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type self:ObjekteTransfer}" ItemsSource="{Binding Objekte}">
<StackPanel Orientation="Horizontal">
@@ -44,7 +45,7 @@
</DataTemplate>
</TreeView.Resources>
</TreeView>
<Button Grid.Row="1" x:Name="ProjektSelect" Content="Objekt Auswählen" />
<Button Grid.Row="1" x:Name="ProjektSelect" Content="Objekt Auswählen" Command="{Binding ObjektSelected}" />
<Button Grid.Row="2" Name="ProjektEdit" Content="Objekt Editieren" />
<Button Grid.Row="3" Name="ObjektNew" Content="Neue Objekt Hinzufügen" Click="ObjektNew_Click" />

View File

@@ -16,13 +16,63 @@ using System.Windows.Shapes;
namespace KanSan.UI
{
public class MouseLeftButtonUp
{
public static DependencyProperty CommandProperty = DependencyProperty.RegisterAttached("Command", typeof(ICommand), typeof(MouseLeftButtonUp), new UIPropertyMetadata(CommandChanged));
public static DependencyProperty CommandParameterProperty =
DependencyProperty.RegisterAttached("CommandParamter",
typeof(object),
typeof(MouseLeftButtonUp),
new UIPropertyMetadata(null));
public static void SetCommand(DependencyObject target, ICommand value)
{
target.SetValue(CommandProperty, value);
}
public static object GetCommand(DependencyObject target, ICommand value)
{
return target.GetValue(CommandProperty);
}
public static void SetCommandParamter(DependencyObject target, object value)
{
target.SetValue(CommandProperty, value);
}
public static object GetCommandParamter(DependencyObject target)
{
return target.GetValue(CommandParameterProperty);
}
private static void CommandChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
//throw new NotImplementedException();
Control control = target as Control;
if (control == null) return;
if ((e.NewValue != null) && (e.OldValue == null))
control.MouseLeftButtonUp += OnMouseLeftButtonUp;
else if ((e.NewValue == null) && (e.OldValue != null))
control.MouseLeftButtonUp -= OnMouseLeftButtonUp;
}
private static void OnMouseLeftButtonUp(object sender, RoutedEventArgs e)
{
//throw new NotImplementedException();
Control control = sender as Control;
ICommand command = (ICommand)control.GetValue(CommandProperty);
object commandParameter = control.GetValue(CommandParameterProperty);
command.Execute(commandParameter);
e.Handled = true;
}
}
/// <summary>
/// Interaktionslogik für UCObjekteList.xaml
/// </summary>
public partial class UCObjekteList : UserControl
{
public event EventHandler<ObjektSelectEventArgs> ObjektSelected;
Baustelle baustelle;
public UCObjekteList()
{
InitializeComponent();
}
public UCObjekteList(Baustelle baustelle)
{
InitializeComponent();
@@ -38,24 +88,17 @@ namespace KanSan.UI
private void trvItems_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
TreeView treeView = (TreeView)sender;
if (treeView == null) return;
if (!(treeView.SelectedItem is Sewer)) return;
Sewer sewer = (Sewer)treeView.SelectedItem;
if (sewer == null) return;
OnObjektSelectKlick(new ObjektSelectEventArgs() { Objekt = sewer });
SewerMainWindow sewerMainWindow = new SewerMainWindow();
sewerMainWindow.DataContext = new SewerMainWindowViewModel(sewer);
sewerMainWindow.ShowDialog();
}
protected virtual void OnObjektSelectKlick(ObjektSelectEventArgs e)
{
EventHandler<ObjektSelectEventArgs> handler = ObjektSelected;
if (handler != null)
handler(this, e);
}
}
public class ObjektSelectEventArgs : EventArgs
{
public Sewer Objekt { get; set; }
}
}

View File

@@ -23,7 +23,7 @@
<Label Background="Beige" Grid.Column="0" Grid.Row="0" Content="Projektnummer" />
<Label Background="Beige" Grid.Column="0" Grid.Row="1" Content="Ort" />
<Button Grid.Row="2" Grid.ColumnSpan="2" Name="Speichern" Content="Speichern" Click="Speichern_Click" />
<Button Grid.Row="2" Grid.ColumnSpan="2" Name="Speichern" Content="Speichern" Command="{Binding SaveProjekt}" />
<TextBox Grid.Column="1" Grid.Row="0" Text="{Binding Projektnummer}" />
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Ort}" />

View File

@@ -20,25 +20,9 @@ namespace KanSan.UI
/// </summary>
public partial class UCProjektEdit : UserControl
{
public event EventHandler SpeichernClicked;
protected virtual void OnSpeichernKlicked(EventArgs e)
{
EventHandler handler = SpeichernClicked;
if (handler != null)
handler(this, e);
}
public UCProjektEdit(Projekt projekt)
public UCProjektEdit()
{
InitializeComponent();
this.DataContext = new ProjektEditViewModel(projekt);
}
private void Speichern_Click(object sender, RoutedEventArgs e)
{
(DataContext as ProjektEditViewModel).Speichern();
OnSpeichernKlicked(EventArgs.Empty);
}
}
}

View File

@@ -17,14 +17,14 @@
<RowDefinition Height="50" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<DataGrid ItemsSource="{Binding ProjekteVomKunde}" Name="dgProjekte" AutoGenerateColumns="False">
<DataGrid IsReadOnly="True" ItemsSource="{Binding ProjekteVomKunde}" SelectedItem="{Binding SelectedProjekt}" Name="dgProjekte" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Projektnummer" Binding="{Binding Projektnummer}" />
<DataGridTextColumn Header="Ort" Binding="{Binding Ort}" />
</DataGrid.Columns>
</DataGrid>
<Button Grid.Row="1" x:Name="ProjektSelect" Content="Projekt Auswählen" Click="ProjektSelect_Click" />
<Button Grid.Row="2" Name="ProjektEdit" Content="Projekt Editieren" Click="ProjektEdit_Click" />
<Button Grid.Row="3" Name="ProjektNew" Content="Neue Projekt Hinzufügen" Click="ProjektNew_Click" />
<Button Grid.Row="1" x:Name="ProjektSelect" Content="Projekt Auswählen" Command="{Binding SelectProjekt}"/>
<Button Grid.Row="2" Name="ProjektEdit" Content="Projekt Editieren" Command="{Binding EditProjekt}"/>
<Button Grid.Row="3" Name="ProjektNew" Content="Neue Projekt Hinzufügen" Command="{Binding NewProjekt}" />
</Grid>
</UserControl>

View File

@@ -20,61 +20,10 @@ namespace KanSan.UI
/// </summary>
public partial class UCProjektList : UserControl
{
public event EventHandler<SelectProjektEventArgs> ProjektAdded;
public event EventHandler<SelectProjektEventArgs> ProjektEdited;
public event EventHandler<SelectProjektEventArgs> ProjektSelected;
public UCProjektList(Kunde selectedKunde)
public UCProjektList()
{
InitializeComponent();
this.DataContext = new ProjektListViewModel(selectedKunde);
}
private void ProjektSelect_Click(object sender, RoutedEventArgs e)
{
Projekt selectedProjekt = (dgProjekte.SelectedItem as Projekt);
if (selectedProjekt == null) return;
OnClickProjektSelect(new SelectProjektEventArgs() { projekt = selectedProjekt });
}
private void ProjektEdit_Click(object sender, RoutedEventArgs e)
{
Projekt selectedProjekt = (dgProjekte.SelectedItem as Projekt);
if (selectedProjekt == null) return;
OnClickProjektEdit(new SelectProjektEventArgs() { projekt = selectedProjekt });
}
private void ProjektNew_Click(object sender, RoutedEventArgs e)
{
OnClickProjektAdd(
new SelectProjektEventArgs()
{
projekt = (DataContext as ProjektListViewModel).NeueProjekt()
});
}
protected virtual void OnClickProjektSelect(SelectProjektEventArgs e)
{
EventHandler<SelectProjektEventArgs> handler = ProjektSelected;
if (handler != null)
handler(this, e);
}
protected virtual void OnClickProjektEdit(SelectProjektEventArgs e)
{
EventHandler<SelectProjektEventArgs> handler = ProjektEdited;
if (handler != null)
handler(this, e);
}
protected virtual void OnClickProjektAdd(SelectProjektEventArgs e)
{
EventHandler<SelectProjektEventArgs> handler = ProjektAdded;
if (handler != null)
handler(this, e);
}
}
public class SelectProjektEventArgs : EventArgs
{
public Projekt projekt { get; set; }
}
}

View File

@@ -0,0 +1,19 @@
<UserControl x:Class="KanSan.UI.UCSanierungOverview"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:KanSan.UI"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="./../../my_controls.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<ContentControl Name="Sanierungsmaßnahmen" Content="{Binding Path=Sanierungsmaßnahmen}" />
</Grid>
</UserControl>

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Text;
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 KanSan.UI
{
/// <summary>
/// Interaktionslogik für UCSanierungOverview.xaml
/// </summary>
public partial class UCSanierungOverview : UserControl
{
public UCSanierungOverview()
{
InitializeComponent();
}
}
}

View File

@@ -52,7 +52,7 @@
</DataGrid.Columns>
</DataGrid>
<Button Grid.Row="1" Name="NewSchaden" Click="NewSchaden_Click" Content="Neue Schäden Hinzufügen" />
<Button Grid.Row="1" Name="NewSchaden" Command="{Binding neueSchadenHinzufügen}" Content="Neue Schäden Hinzufügen" />
<Button Grid.Row="2" Name="GenerateExcel" Content="Schadensbericht erstellen" Click="GenerateExcel_Click" />
</Grid>
</UserControl>

View File

@@ -29,6 +29,11 @@ namespace KanSan.UI
this.DataContext = new SchaedenListViewModel(actualSelectedSewer);
}
public UCSchaedenList()
{
InitializeComponent();
}
protected virtual void OnClickSchaedenSelect(SelectSchaedenEventArgs e)
{
EventHandler<SelectSchaedenEventArgs> handler = SchaedenSelected;

View File

@@ -0,0 +1,42 @@
<syncfusion:ChromelessWindow x:Class="KanSan.UI.SewerMainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:syncfusion="clr-namespace:Syncfusion.Windows.Shared;assembly=Syncfusion.Shared.WPF"
xmlns:local="clr-namespace:KanSan.UI"
mc:Ignorable="d" TitleBarBackground="BlueViolet"
Title="SewerMainWindow" Height="450" Width="800" WindowStartupLocation="CenterScreen" WindowState="Maximized">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="./../my_controls.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="11*" />
<RowDefinition Height="64*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2">
<TextBlock Text="{Binding ObjektBezeichnung}" />
<!--<TextBlock Text="{Binding Path=(self:SewerMainMenuViewModel.ObjektBezeichnung)}" />
<TextBlock Text="{Binding Path=(self:SewerMainMenuViewModel.SchadenEntfernung)}" />-->
<TextBlock Text="" />
</StackPanel>
<!--<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding Path=(self:SewerMainMenuViewModel.ObjektBezeichnung)}" />-->
<StackPanel Grid.Column="0" Grid.Row="1" Name="MenuItems">
<RadioButton Command="{Binding StammdatenSelect}" Style="{StaticResource ToggelButtonList}" Content="Stammdaten" />
<RadioButton Command="{Binding SchädenübersichtSelect}" Name="rbSchaeden" Style="{StaticResource ToggelButtonList}" Content="Schäden" />
</StackPanel>
<ContentControl Grid.Column="1" Grid.Row="1" Content="{Binding AktualView}" Name="ObjektContentcontroller" />
</Grid>
</syncfusion:ChromelessWindow>

View File

@@ -0,0 +1,33 @@
using KanSan.Base.Models;
using KanSan.ViewModel;
using Syncfusion.Windows.Shared;
using System;
using System.Collections.Generic;
using System.Text;
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.Shapes;
namespace KanSan.UI
{
/// <summary>
/// Interaktionslogik für SewerMainWindow.xaml
/// </summary>
public partial class SewerMainWindow : ChromelessWindow
{
public SewerMainWindow()
{
InitializeComponent();
}
public SewerMainWindow(Sewer model)
{
InitializeComponent();
this.DataContext = new SewerMainWindowViewModel(model);
}
}
}

View File

@@ -4,6 +4,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:self="clr-namespace:KanSan.ViewModel;assembly=KanSan.ViewModel"
xmlns:syncfusion="clr-namespace:Syncfusion.Windows.Shared;assembly=Syncfusion.Shared.WPF"
xmlns:local="clr-namespace:KanSan.UI"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">

View File

@@ -24,9 +24,9 @@ namespace KanSan.UI
public UCSewerMainMenu(Sewer objekt)
{
InitializeComponent();
this.DataContext = new SewerMainMenuViewModel(objekt);
UI.UCObjektEdit uCObjektEdit = new UCObjektEdit(objekt);
ObjektContentcontroller.Content = uCObjektEdit;
this.DataContext = new SewerMainWindowViewModel(objekt);
//UI.UCObjektEdit uCObjektEdit = new UCObjektEdit(objekt);
//ObjektContentcontroller.Content = uCObjektEdit;
rbStammdaten.IsChecked = true;
Style style = this.FindResource("ToggelButtonList") as Style;
@@ -42,30 +42,31 @@ namespace KanSan.UI
private void rbSewerMenuItem_Checked(object sender, RoutedEventArgs e)
{
/*
RadioButton btn = (RadioButton)sender;
if (btn == null) return;
switch(btn.Name)
{
case "rbStammdaten":
UI.UCObjektEdit uCObjektEdit = new UCObjektEdit((DataContext as SewerMainMenuViewModel).Objekt);
UI.UCObjektEdit uCObjektEdit = new UCObjektEdit((DataContext as SewerMainWindowViewModel).Objekt);
ObjektContentcontroller.Content = uCObjektEdit;
break;
case "rbSchaeden":
UI.UCSchaedenList uCSchaedenList = new UCSchaedenList((DataContext as SewerMainMenuViewModel).Objekt);
UI.UCSchaedenList uCSchaedenList = new UCSchaedenList((DataContext as SewerMainWindowViewModel).Objekt);
uCSchaedenList.SchaedenSelected += UCSchaedenList_SchaedenSelected;
uCSchaedenList.SanierungsmaßnahmenSelected += UCSchaedenList_SanierungsmaßnahmenSelected;
ObjektContentcontroller.Content = uCSchaedenList;
break;
}
*/
}
Schaeden aktuellSchadenSelected = null;
private void UCSchaedenList_SanierungsmaßnahmenSelected(object sender, SelectSchaedenEventArgs e)
{
aktuellSchadenSelected = e.schaeden;
UI.UCSanMaßnahmenList uCSanMaßnahmenList = new UCSanMaßnahmenList(e.schaeden);
(DataContext as SewerMainMenuViewModel).Schaden = e.schaeden;
(DataContext as SewerMainWindowViewModel).Schaden = e.schaeden;
uCSanMaßnahmenList.TaetigkeitenSelected += UCSanMaßnahmenList_TaetigkeitenSelected;
rbSchaeden.IsChecked = false;
@@ -103,7 +104,7 @@ namespace KanSan.UI
private void UCSchaedenEdit_SpeichernClicked(object sender, EventArgs e)
{
UI.UCSchaedenList uCSchaedenList = new UCSchaedenList((DataContext as SewerMainMenuViewModel).Objekt);
UI.UCSchaedenList uCSchaedenList = new UCSchaedenList((DataContext as SewerMainWindowViewModel).Objekt);
uCSchaedenList.SchaedenSelected += UCSchaedenList_SchaedenSelected;
ObjektContentcontroller.Content = uCSchaedenList;
}

View File

@@ -1,10 +1,37 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:KanSan"
xmlns:vm="clr-namespace:KanSan.ViewModel;assembly=KanSan.ViewModel"
xmlns:l="clr-namespace:KanSan.UI">
<DataTemplate x:Key="SanierungViewModelDataTemplate" DataType="{x:Type l:UCHarzSanierung }">
<l:UCHarzSanierung />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ProjektEditViewModel}">
<l:UCProjektEdit />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:KundenListViewModel}">
<l:UCKundeList/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:KundenEditViewModel}">
<l:UCKundeEdit/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ProjektListViewModel}">
<l:UCProjektList/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:BaustellenListViewModel}">
<l:UCBaustelleList/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ObjekteListViewModel}">
<l:UCObjekteList />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ObjekteEditViewModel}">
<l:UCObjektEdit />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:SchaedenListViewModel}">
<l:UCSchaedenList />
</DataTemplate>
<DataTemplate x:Key="SelectNewTätigkeitenLVPosition">
<Border BorderThickness="2" BorderBrush="Red">
<ItemsControl ItemsSource="{Binding LVPositionen }">