private void OnHinzufuegen()
        {
            var vm = new SzenarioKomponenteViewModel
            {
                Komponente              = NeueKomponente,
                Gewicht                 = 0,
                Beschreibung            = null,
                Guid                    = Guid.NewGuid().ToString(),
                AlternativeHersteller   = NeuerHersteller,
                AlternativeBeschreibung = NeueBeschreibung,
                AlternativeGroesse      = NeueGroesse,
                AlternativeJahr         = NeuesJahr,
                AlternativeGewicht      = NeuesGewicht,
                AlternativeVorhanden    = true,
                LoeschenAction          = ZeileLoeschen
            };

            vm.PropertyChanged += ContentPropertyChanged;
            VergleichsListe.Add(vm);

            var ohneZuordnung = new OhneZuordnungViewModel
            {
                Guid         = vm.Guid,
                Komponente   = vm.Komponente,
                Beschreibung = vm.Beschreibung,
                Alternative  = vm.AlternativeName,
                Gewicht      = vm.AlternativeGewicht,
                Differenz    = vm.AlternativeDifferenz
            };

            ohneZuordnung.ZuordnenAction = OnZuordnenOhneKomponente;
            OhneKomponente.Add(ohneZuordnung);

            UpdateProperty("GesamtDifferenz");
            UpdateProperty("GesamtGewichtAlternativen");

            NeueKomponente    = "";
            NeuerHersteller   = "";
            NeueBeschreibung  = "";
            NeueGroesse       = "";
            NeuesJahr         = "";
            NeuesGewicht      = 0;
            KomponenteEnabled = true;
        }
        private void ZeileLoeschen(string guid, bool nurAlternative)
        {
            var teil = VergleichsListe.First(item => item.Guid == guid);

            if (teil != null)
            {
                if (nurAlternative)
                {
                    var ohneZuordnung = new OhneZuordnungViewModel
                    {
                        Guid         = teil.Guid,
                        Komponente   = teil.Komponente,
                        Beschreibung = teil.Beschreibung,
                        Gewicht      = teil.Gewicht,
                        Differenz    = -teil.Gewicht,
                        Alternative  = teil.AlternativeName
                    };
                    ohneZuordnung.ZuordnenAction = OnZuordnenOhneAlternative;
                    OhneAlternative.Add(ohneZuordnung);
                }
                else
                {
                    VergleichsListe.Remove(teil);

                    var ohneKomponente = OhneKomponente.FirstOrDefault(item => item.Guid == guid);
                    if (ohneKomponente != null)
                    {
                        OhneKomponente.Remove(ohneKomponente);
                    }
                }

                NeuerHersteller  = "";
                NeueBeschreibung = "";
                NeueGroesse      = "";
                NeuesJahr        = "";
                NeuesGewicht     = 0;
                UpdateProperty("GesamtDifferenz");
                UpdateProperty("GesamtGewichtAlternativen");
            }
        }
        private void EinbauenGewichtsdatenbank(string komponente,
                                               string hersteller,
                                               string beschreibung,
                                               string groesse,
                                               string jahr,
                                               int gewicht)
        {
            var vm = new SzenarioKomponenteViewModel()
            {
                Komponente              = komponente,
                Beschreibung            = null,
                Gewicht                 = 0,
                Guid                    = Guid.NewGuid().ToString(),
                AlternativeHersteller   = hersteller,
                AlternativeBeschreibung = beschreibung,
                AlternativeGroesse      = groesse,
                AlternativeJahr         = jahr,
                AlternativeGewicht      = gewicht,
                AlternativeVorhanden    = true,
                LoeschenAction          = ZeileLoeschen
            };

            vm.PropertyChanged += ContentPropertyChanged;
            VergleichsListe.Add(vm);
            UpdateProperty("GesamtDifferenz");
            UpdateProperty("GesamtGewichtAlternativen");

            var ohneZuordnung = new OhneZuordnungViewModel
            {
                Guid         = vm.Guid,
                Komponente   = vm.Komponente,
                Beschreibung = vm.Beschreibung,
                Alternative  = vm.AlternativeName,
                Gewicht      = vm.AlternativeGewicht,
                Differenz    = vm.AlternativeDifferenz
            };

            ohneZuordnung.ZuordnenAction = OnZuordnenOhneKomponente;
            OhneKomponente.Add(ohneZuordnung);
        }
        private void EinbauenRestekiste(string guid)
        {
            var restteil = Restekiste.First(teil => teil.Guid == guid);

            if (restteil != null)
            {
                var vm = new SzenarioKomponenteViewModel()
                {
                    Komponente              = restteil.Komponente,
                    Beschreibung            = null,
                    Gewicht                 = 0,
                    Guid                    = restteil.Guid,
                    AlternativeHersteller   = restteil.Hersteller,
                    AlternativeBeschreibung = restteil.Beschreibung,
                    AlternativeGroesse      = restteil.Groesse,
                    AlternativeJahr         = restteil.Jahr,
                    AlternativeGewicht      = restteil.Gewicht,
                    AlternativeVorhanden    = true,
                    LoeschenAction          = ZeileLoeschen
                };
                vm.PropertyChanged += ContentPropertyChanged;
                VergleichsListe.Add(vm);
                UpdateProperty("GesamtDifferenz");
                UpdateProperty("GesamtGewichtAlternativen");
                Restekiste.Remove(restteil);

                var ohneZuordnung = new OhneZuordnungViewModel
                {
                    Guid         = vm.Guid,
                    Komponente   = vm.Komponente,
                    Beschreibung = vm.Beschreibung,
                    Alternative  = vm.AlternativeName,
                    Gewicht      = vm.AlternativeGewicht,
                    Differenz    = vm.AlternativeDifferenz
                };
                ohneZuordnung.ZuordnenAction = OnZuordnenOhneKomponente;
                OhneKomponente.Add(ohneZuordnung);
            }
        }
        public SzenariorechnerViewModel(FahrradViewModel selectedFahrrad, List <KomponenteDto> alternativenListe)
        {
            var komponentenListe = new List <KomponenteDto>();

            PluginManager.DbManager.GetKomponente(selectedFahrrad.Guid, ref komponentenListe);

            VergleichsListe = new ObservableCollection <SzenarioKomponenteViewModel>();
            OhneAlternative = new ObservableCollection <OhneZuordnungViewModel>();
            OhneKomponente  = new ObservableCollection <OhneZuordnungViewModel>();
            Restekiste      = new ObservableCollection <SzenarioAlternativeViewModel>();
            Wunschliste     = new ObservableCollection <SzenarioAlternativeViewModel>();

            foreach (var item in komponentenListe)
            {
                var vm = new SzenarioKomponenteViewModel()
                {
                    Komponente           = item.Komponente,
                    Gewicht              = item.Gewicht,
                    Guid                 = item.Guid,
                    Beschreibung         = HilfsFunktionen.GetAnzeigeName(item),
                    AlternativeVorhanden = false,
                    LoeschenAction       = ZeileLoeschen
                };
                vm.PropertyChanged += ContentPropertyChanged;

                var alternative = alternativenListe.Find(x => x.Komponente == item.Komponente);
                if (alternative != null)
                {
                    vm.AlternativeHersteller   = alternative.Hersteller;
                    vm.AlternativeBeschreibung = alternative.Beschreibung;
                    vm.AlternativeGroesse      = alternative.Groesse;
                    vm.AlternativeJahr         = alternative.Jahr;
                    vm.AlternativeGewicht      = alternative.Gewicht;
                    vm.AlternativeVorhanden    = true;
                    alternativenListe.Remove(alternative);
                }
                else
                {
                    vm.AlternativeVorhanden    = false;
                    vm.AlternativeHersteller   = "";
                    vm.AlternativeBeschreibung = "";
                    vm.AlternativeGroesse      = "";
                    vm.AlternativeJahr         = "";
                    vm.AlternativeGewicht      = 0;

                    var zuord = new OhneZuordnungViewModel
                    {
                        Guid         = vm.Guid,
                        Komponente   = vm.Komponente,
                        Beschreibung = vm.Beschreibung,
                        Gewicht      = vm.Gewicht,
                        Differenz    = -vm.Gewicht,
                        Alternative  = vm.AlternativeName
                    };
                    zuord.ZuordnenAction = OnZuordnenOhneAlternative;
                    OhneAlternative.Add(zuord);
                }
                VergleichsListe.Add(vm);
            }

            foreach (var item in alternativenListe)
            {
                var vm = new SzenarioKomponenteViewModel
                {
                    Komponente              = item.Komponente,
                    Gewicht                 = 0,
                    Beschreibung            = null,
                    Guid                    = item.Guid,
                    AlternativeHersteller   = item.Hersteller,
                    AlternativeBeschreibung = item.Beschreibung,
                    AlternativeGroesse      = item.Groesse,
                    AlternativeJahr         = item.Jahr,
                    AlternativeGewicht      = item.Gewicht,
                    AlternativeVorhanden    = true,
                    LoeschenAction          = ZeileLoeschen
                };
                vm.PropertyChanged += ContentPropertyChanged;
                VergleichsListe.Add(vm);

                var zuord = new OhneZuordnungViewModel
                {
                    Guid         = vm.Guid,
                    Komponente   = vm.Komponente,
                    Beschreibung = vm.Beschreibung,
                    Alternative  = vm.AlternativeName,
                    Gewicht      = vm.AlternativeGewicht,
                    Differenz    = vm.AlternativeDifferenz
                };
                zuord.ZuordnenAction = OnZuordnenOhneKomponente;
                OhneKomponente.Add(zuord);
            }

            SelectedKomponente = null;

            var restekiste = new List <RestteilDto>();

            PluginManager.DbManager.GetEinzelteile(ref restekiste);

            foreach (var restteil in restekiste)
            {
                var vm = new SzenarioAlternativeViewModel()
                {
                    Komponente     = restteil.Komponente,
                    Gewicht        = restteil.Gewicht,
                    Hersteller     = restteil.Hersteller,
                    Beschreibung   = restteil.Beschreibung,
                    Groesse        = restteil.Groesse,
                    Jahr           = restteil.Jahr,
                    Guid           = restteil.Guid,
                    Differenz      = 0,
                    EinbauenAction = EinbauenRestekiste,
                    TauschenAction = TauschenRestekiste
                };
                Restekiste.Add(vm);
            }

            AlleRestteile         = CollectionViewSource.GetDefaultView(Restekiste);
            RestekisteFilterAktiv = true;
            AlleRestteile.Filter  = FilterRestekiste;

            var wunschliste = new List <WunschteilDto>();

            PluginManager.DbManager.GetWunschteile(ref wunschliste);

            foreach (var wunschteil in wunschliste)
            {
                var vm = new SzenarioAlternativeViewModel()
                {
                    Komponente     = wunschteil.Komponente,
                    Gewicht        = wunschteil.Gewicht,
                    Hersteller     = wunschteil.Hersteller,
                    Beschreibung   = wunschteil.Beschreibung,
                    Groesse        = wunschteil.Groesse,
                    Jahr           = wunschteil.Jahr,
                    Guid           = wunschteil.Guid,
                    Differenz      = 0,
                    EinbauenAction = EinbauenWunschliste,
                    TauschenAction = TauschenWunschliste
                };
                Wunschliste.Add(vm);
            }

            AlleWunschteile        = CollectionViewSource.GetDefaultView(Wunschliste);
            WunschlisteFilterAktiv = true;
            AlleWunschteile.Filter = FilterWunschliste;

            var datenbanken = new List <DatenbankDto>
            {
                new DatenbankDto {
                    Datenbank = "mtb-news.de"
                },
                new DatenbankDto {
                    Datenbank = "rennrad-news.de"
                }
            };

            PluginManager.DbManager.GetDatenbankDaten(ref datenbanken);

            DatenbankViewModel = new WebAuswahlViewModel(datenbanken, DatenbankModus.NoneSelection);
            DatenbankViewModel.EinbauenAction = EinbauenGewichtsdatenbank;
            DatenbankViewModel.TauschenAction = TauschenGewichtsdatenbank;

            NeueKomponente    = "";
            NeuerHersteller   = "";
            NeueBeschreibung  = "";
            NeueGroesse       = "";
            NeuesJahr         = "";
            KomponenteEnabled = true;

            NeuesFahrrad = "";

            NameFahrrad = selectedFahrrad.Name;

            AlternativeBearbeiten = true;

            HinzufuegenCommand  = new MyCommand(OnHinzufuegen);
            TauschenCommand     = new MyCommand(OnTauschen);
            NeuesFahrradCommand = new MyParameterCommand <Window>(OnNeuesFahrrad);
        }