public void AddModelListener(IModelOwner owner, string value)
        {
            lock (modelOwners)
            {
                if (!modelOwners.ContainsKey(value))
                {
                    modelOwners.Add(value, new List <IModelOwner>());
                }

                if (!modelOwners[value].Contains(owner))
                {
                    modelOwners[value].Add(owner);
                }
            }
        }
        public void RemoveModelListener(IModelOwner owner, string value)
        {
            lock (modelOwners)
            {
                if (!modelOwners.ContainsKey(value))
                {
                    return;
                }

                if (modelOwners[value].Contains(owner))
                {
                    modelOwners[value].Remove(owner);
                }
                if (modelOwners[value].Count == 0)
                {
                    modelOwners.Remove(value);
                }
            }
        }