public ObservableCollection<ItemViewModel> ApplicationIncludeList(string ruleName,string parameter, string propertyName)
        {
            var result = new ObservableCollection<ItemViewModel>();
               IEnumerable<Rule> rules = _packageSource.AllRules.GetRulesByName(ruleName);
               IEnumerable<string> r = (rules != null) ? rules.GetRulesByParameter(parameter).GetPropertyValues(propertyName) : new string[0];

               {
               foreach (string value in r)
               {
                   var model = new ItemViewModel();
                   model.Reader = this;

                   //  model.UpdateSource = SetSourceRequireRules;
                   model.SourceValue = value;
                  // model.Root = root;
                   result.Add(model);

               }
               }

               return result;
        }
        public ObservableCollection<ItemViewModel> GetDefineRules()
        {
            var result = new ObservableCollection<ItemViewModel>();
            foreach (Rule rule in _packageSource.DefineRules)
            {
                foreach (string propertyName in rule.PropertyNames)
                {
                   var model = new ItemViewModel();
                   PropertyRule propertyRule = rule[propertyName];
                   model.Label = propertyName;
                   var firstOrDefault = propertyRule.PropertyValues.FirstOrDefault();
                   if (firstOrDefault != null)
                   {
                      model.Reader = this;
                      model.UpdateSource = SetSourceDefineRules;
                      model.SourceValue = firstOrDefault.SourceValues.FirstOrDefault();
                    //model.Value = propertyRule.Value;//no need to set-is evaluated in the sourcevalue;
                   }

                    result.Add(model);
                }

            }
            return result;
        }
        public ObservableCollection<ItemViewModel> GetRulesSourceValuesByParameterForEditableCollections(string ruleName, string parameter, string propertyName)
        {
            var result = new ObservableCollection<ItemViewModel>();
            IEnumerable<Rule> rules = _packageSource.Rules.GetRulesByName(ruleName);
            IEnumerable<string> r = (rules != null) ? rules.GetRulesByParameter(parameter).GetPropertyValues(propertyName) : new string[0];

            {
                foreach (string value in r)
                {
                    var model = new ItemViewModel();
                    model.Reader = this;
                   // model.UpdateSource = SetSourceManifestRules;
                    model.SourceValue = value;
                    result.Add(model);
                }
            }

            return result;
        }
        public ObservableCollection<ItemViewModel> GetRulesSourceValuesByNameForEditableCollections(string ruleName, string propertyName)
        {
            var result = new ObservableCollection<ItemViewModel>();
            PropertyRule propertyRule = _packageSource.AllRules.GetRulesByName(ruleName).GetProperty(ruleName, propertyName);
            if (propertyRule != null)
            {
              foreach (PropertyValue propertyValue in propertyRule.PropertyValues)
                    {

                        foreach (string sourceValue in propertyValue.SourceValues)
                        {
                            var model = new ItemViewModel();
                            model.Reader = this;
                            model.UpdateSource = SelectUpdateMethod(ruleName);
                            model.SourceValue = sourceValue;
                           // model.Value = no need to set-is evaluated in the sourcevalue;
                            result.Add(model);
                        }
                }
            }

            return result;
        }
        public ObservableCollection<ItemViewModel> GetRulesSourceValuesByParameterForEditableCollections(string ruleName, string parameter, string propertyName)
        {
            var result = new ObservableCollection<ItemViewModel>();
            PropertyRule propertyRule = _packageSource.AllRules.GetRulesByName(ruleName).GetProperty(ruleName, propertyName);
            if (propertyRule != null)
            {
                foreach (PropertyValue propertyValue in propertyRule.PropertyValues)
                {
                    int count = propertyValue.SourceValues.Count();
                    for (int i = 0; i <count ; i++)
                    {
                        var model = new ItemViewModel();
                        model.Reader = this;
                        model.Label = parameter;
                        model.Index = i;
                      //  model.UpdateSource = SetMiFINAL;
                        model.SourceValue = propertyValue.SourceValues.ToList()[i];
                      //  model.Value = propertyValue.Values.ToList()[i];
                        result.Add(model);

                    }

                }
            }

            return result;
        }
        public ObservableCollection<ItemViewModel> GETMiFINAL(string parameter, IEnumerable<string> value)
        {
            var result = new ObservableCollection<ItemViewModel>();

               IEnumerable<Rule> hRules = _packageSource.AllRules.GetRulesByName("manifest");
               PropertyRule propertyRule = null;
               foreach (Rule hRule in hRules)
               {
               if ( parameter==hRule.Parameter)
               {
                   propertyRule = hRule["include"];
                   if (propertyRule != null)
                   {
                       PropertyValue propertyValue = propertyRule.PropertyValues.FirstOrDefault();

                       if (propertyValue != null)
                       {
                           foreach (string sourceValue in propertyValue.SourceValues)
                           {
                               var model = new ItemViewModel();
                               model.Reader = this;
                               model.Label = parameter;
                               model.UpdateSource = SetMiFINAL;
                               model.SourceValue = sourceValue;
                               // model.Value = no need to set-is evaluated in the sourcevalue;
                               result.Add(model);
                           }

                       }
                   }

               }
               }

               return result;
        }