public void InitControl()
        {
            foreach (var star in StarList)
            {
                var behavior = (StarBehavior)star.Behaviors[0];
                behavior.PropertyChanged -= RatingchangedEvent;
                star.Behaviors.Remove(behavior);
                Children.Remove(star);
            }

            for (int x = 0; x < this.Count; x++)
            {
                var behavior = new StarBehavior()
                {
                    GroupName = "starGrouping"
                };
                behavior.Index = (x + 1);
                var gd            = new Grid();
                var unSelectedImg = new Image();
                unSelectedImg.SetBinding(Image.SourceProperty, new Binding(source: this, path: "UnSelectedImage"));
                var selectedImg = new Image();
                selectedImg.SetBinding(Image.SourceProperty, new Binding(source: this, path: "SelectedImage"));
                selectedImg.SetBinding(Image.IsVisibleProperty, new Binding(source: behavior, path: "IsStarred"));
                gd.Children.Add(unSelectedImg, 0, 0);
                gd.Children.Add(selectedImg, 0, 0);

                if (x == (Count - 1))
                {
                    behavior.PropertyChanged += RatingchangedEvent;
                }

                gd.Behaviors.Add(behavior);
                Children.Add(gd);
            }
        }
        static void OnGroupNameChanged(BindableObject bindable, object oldValue, object newValue)
        {
            StarBehavior behavior     = (StarBehavior)bindable;
            string       oldGroupName = (string)oldValue;
            string       newGroupName = (string)newValue;

            // Remove existing behavior from Group
            if (String.IsNullOrEmpty(oldGroupName))
            {
                defaultBehaviors.Remove(behavior);
            }
            else
            {
                List <StarBehavior> behaviors = starGroups[oldGroupName];
                behaviors.Remove(behavior);

                if (behaviors.Count == 0)
                {
                    starGroups.Remove(oldGroupName);
                }
            }

            // Add New Behavior to the group
            if (String.IsNullOrEmpty(newGroupName))
            {
                defaultBehaviors.Add(behavior);
            }
            else
            {
                List <StarBehavior> behaviors = null;

                if (starGroups.ContainsKey(newGroupName))
                {
                    behaviors = starGroups[newGroupName];
                }
                else
                {
                    behaviors = new List <StarBehavior>();
                    starGroups.Add(newGroupName, behaviors);
                }

                behaviors.Add(behavior);
            }
        }
        static void OnIsStarredChanged(BindableObject bindable, object oldValue, object newValue)
        {
            StarBehavior behavior = (StarBehavior)bindable;

            if ((bool)newValue)
            {
                string groupName = behavior.GroupName;
                List <StarBehavior> behaviors = null;

                if (string.IsNullOrEmpty(groupName))
                {
                    behaviors = defaultBehaviors;
                }
                else
                {
                    behaviors = starGroups[groupName];
                }

                bool itemReached = false;

                foreach (var item in behaviors)
                {
                    if (item != behavior && !itemReached)
                    {
                        item.IsStarred = true;
                    }
                    if (item == behavior)
                    {
                        itemReached    = true;
                        item.IsStarred = true;
                    }
                    if (item != behavior && itemReached)
                    {
                        item.IsStarred = false;
                    }

                    item.Rating = behavior.Index;
                }
            }
        }