using DaSaSo.Domain.Model; using DaSaSo.Domain.Services; using DaSaSo.Domain.Services.SewerObjectService; using DaSaSo.Domain.Services.SewerPointServices; using DaSaSo.EntityFramework.Services; using DaSaSo.ViewModel.Commands; using DaSaSo.ViewModel.Interface; using Microsoft.Toolkit.Mvvm.Input; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; namespace DaSaSo.ViewModel { public class SewerMainListViewModel : BaseViewModel { private ISewerMainNavigator Navigator { get; set; } private readonly SewerObjectDataService _dataservice; private readonly ISewerObjectService _sewerObjectService; private readonly IRenavigator _renavigator; private IActualProject ActualProject { get; set; } public ICommand UpdateCurrentSewerViewModelCommand { get; } public ICommand CloseCommand { get; set; } public ICommand SchadenCommand { get; set; } public BaseViewModel CurrentSewerViewModel => Navigator.CurrentViewModel; public bool CanSelectDamage => Schaden != null; public bool IsLoading { get => _isLoading; set { if (_isLoading != value) { _isLoading = value; OnPropertyChanged(); } } } private SewerDamage _schaden; public SewerDamage Schaden { get => _schaden; set { _schaden = value; OnPropertyChanged(); OnPropertyChanged(nameof(CanSelectDamage)); } } public string Strasse { get => ActualProject.AktuellSewerObject.StreetName; } public string AktualObject { get => ActualProject.AktuellSewerObject.ObjektName; } bool _isLoading = true; public bool CanSaveSewer => !string.IsNullOrEmpty(ActualProject.AktuellSewerObject.StreetName); public SewerMainListViewModel( IDataService dataService, ISewerMainNavigator navigator, IActualProject actualProject, IViewModelSewerMainFactory viewModelFactory, IRenavigator renavigator, ISewerObjectService sewerObjectService, ISewerpointService sewerpointService ) { Navigator = navigator; ActualProject = actualProject; _dataservice = (SewerObjectDataService)dataService; _renavigator = renavigator; _sewerObjectService = sewerObjectService; CloseCommand = new SaveSewerCommand(_dataservice,ActualProject,_sewerObjectService,_renavigator,Navigator); //RelayCommand(SaveSewer); LoadModel(); UpdateCurrentSewerViewModelCommand = new UpdateCurrentSewerViewModelCommand(Navigator, viewModelFactory); Navigator.StateChanged += () => OnPropertyChanged(nameof(CurrentSewerViewModel)); ActualProject.SewerDamageChanged += ActualProject_SewerDamageChanged; //SchadenCommand = UpdateCurrentSewerViewModelCommand.Execute(); // new SelectDamageCommand(this); } private void ActualProject_SewerDamageChanged(object? sender, EventArgs e) { Schaden = ActualProject.AktuellSewerDamage; OnPropertyChanged(nameof(Schaden)); } private async void LoadModel() { IsLoading = true; SewerObject sewer = await _dataservice.Get(ActualProject.AktuellSewerObject.Id); ActualProject.SetSewerObject(sewer,false); IsLoading = false; } public override void Dispose() { Navigator.StateChanged -= () => OnPropertyChanged(nameof(CurrentSewerViewModel)); base.Dispose(); } } }