public void AddResearchTeams(params ResearchTeam[] newTeams)
        {
            foreach (var team in newTeams)
            {
                team.PropertyChanged += ControlPropertyChanging;
                resTeamDict.Add(keySelector.Invoke(team), team);
                // Do not add right, added only last object

                ResearchTeamsChanged.Invoke(this, new ResearchTeamsChangedEventArgs <Tkey>(CollectionName, Revision.Add, "AddResearchTeams", team.LicenceNumber));
            }
        }
 public bool Remove(ResearchTeam rt)
 {
     if (!resTeam.ContainsValue(rt))
     {
         return(false);
     }
     else
     {
         foreach (var item in resTeam.Where(kpv => kpv.Value.Equals(rt)).ToList())
         {
             resTeam.Remove(item.Key);
             item.Value.PropertyChanged -= ResearchTeamChangedInto;
             ResearchTeamsChanged?.Invoke(this, new ResearchTeamsChangedEventArgs <TKey>(CollectionName, Revision.Remove, " ", rt.ReNumber));
         }
         return(true);
     }
 }
 public bool Replace(ResearchTeam rtold, ResearchTeam rtnew)
 {
     if (!resTeam.ContainsValue(rtold))
     {
         return(false);
     }
     else
     {
         foreach (var item in resTeam.Where(kpv => kpv.Value.Equals(rtold)).ToArray())
         {
             resTeam[item.Key]      = rtnew;
             rtold.PropertyChanged -= ResearchTeamChangedInto;
             rtnew.PropertyChanged += ResearchTeamChangedInto;
             ResearchTeamsChanged?.Invoke(this, new ResearchTeamsChangedEventArgs <TKey>(CollectionName, Revision.Replace, " ", rtnew.ReNumber));
         }
         return(true);
     }
 }
        public bool Remove(ResearchTeam rt)
        {
            if (!resTeamDict.Values.Contains(rt))
            {
                return(false);
            }

            foreach (var pair in resTeamDict)
            {
                if (pair.Value == rt)
                {
                    pair.Value.PropertyChanged -= ControlPropertyChanging;
                    resTeamDict.Remove(pair.Key);
                    ResearchTeamsChanged.Invoke(this, new ResearchTeamsChangedEventArgs <Tkey>(CollectionName, Revision.Remove, "", rt.LicenceNumber));
                    break;
                }
            }

            return(true);
        }
        public bool Replace(ResearchTeam rold, ResearchTeam rnew)
        {
            if (!resTeamDict.Values.Contains(rold))
            {
                return(false);
            }

            Tkey tempKey = default(Tkey);

            foreach (var pair in resTeamDict)
            {
                if (pair.Value == rold)
                {
                    pair.Value.PropertyChanged -= ControlPropertyChanging;
                    tempKey = pair.Key;
                    rnew.PropertyChanged += ControlPropertyChanging;
                }
            }

            resTeamDict[tempKey] = rnew;
            ResearchTeamsChanged.Invoke(this, new ResearchTeamsChangedEventArgs <Tkey>(CollectionName, Revision.Replace, "", rold.LicenceNumber));

            return(true);
        }
        public void ResearchTeamChangedInto(object sender, PropertyChangedEventArgs e) //обработчик события изменений свойств
        {
            int num = resTeam.First(i => i.Value == (ResearchTeam)sender).Value.ReNumber;

            ResearchTeamsChanged?.Invoke(this, new ResearchTeamsChangedEventArgs <TKey>(CollectionName, Revision.Property, e.PropertyName, num));
        }
 void ControlPropertyChanging(object source, PropertyChangedEventArgs args)
 {
     ResearchTeamsChanged.Invoke(this, new ResearchTeamsChangedEventArgs <Tkey>(CollectionName, Revision.Property, args.PropertyName, (source as ResearchTeam).LicenceNumber));
 }