示例#1
0
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            //View view = convertView ?? inflater.Inflate(layoutId, parent, false);
            View view;

            try
            {
                view = convertView ?? inflater.Inflate(layoutId, parent, false);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                throw;
            }

            TItem item = this[position];

            XmlBindingApplicator applicator;

            if (convertView == null ||
                !bindingsDictionary.TryGetValue(view, out applicator))
            {
                applicator = new XmlBindingApplicator();
            }
            else
            {
                applicator.RemoveBindings();
            }

            applicator.ApplyBindings(view, item, layoutId);

            bindingsDictionary[view] = applicator;

            return(view);
        }
示例#2
0
 public BoundViewData(
     XmlBindingApplicator applicator,
     object dataContext)
 {
     Applicator  = applicator;
     DataContext = dataContext;
 }
示例#3
0
        public override View GetChildView(
            int groupPosition, int childPosition,
            bool isLastChild, View convertView, ViewGroup parent)
        {
            var view = convertView;

            var item     = groupings[groupPosition][childPosition];
            int layoutId = getLayoutIdFunc(item);

            if (view == null)
            {
                view = inflater.Inflate(/*Resource.Layout.OptionTemplate_Boolean*/ layoutId, null);
            }
            else
            {
                if (bindingsDictionary.TryGetValue(view, out BoundViewData viewData))
                {
                    var currentDataContext = viewData.DataContext;

                    if (currentDataContext != null && currentDataContext.Equals(item) &&
                        viewData.Applicator.HasBindings)
                    {
                        return(view);
                    }

                    viewData.Applicator.RemoveBindings();

                    /* If the item is not of the same type, do not reuse the view. */
                    if (viewData.DataContext.GetType() != item.GetType())
                    {
                        view = inflater.Inflate(layoutId, null);
                    }
                }
            }

            var applicator = new XmlBindingApplicator();

            applicator.ApplyBindings(view, item, layoutId);
            bindingsDictionary[view] = new BoundViewData(applicator, item);
            reverseLookup[item]      = view;

            return(view);
        }
示例#4
0
        public override View GetGroupView(
            int groupPosition, bool isExpanded, View convertView, ViewGroup parent)
        {
            var view = convertView;

            var group = groupings[groupPosition];

            if (view == null)
            {
                view = inflater.Inflate(groupHeaderLayoutId, null);
            }
            else
            {
                if (bindingsDictionary.TryGetValue(
                        view, out BoundViewData viewData))
                {
                    var currentDataContext = viewData.DataContext;

                    if (currentDataContext != null && currentDataContext.Equals(group) &&
                        viewData.Applicator.HasBindings)
                    {
                        return(view);
                    }

                    viewData.Applicator.RemoveBindings();

                    if (viewData.DataContext.GetType() != group.GetType())
                    {
                        view = inflater.Inflate(groupHeaderLayoutId, null);
                    }
                }
            }

            var applicator = new XmlBindingApplicator();

            applicator.ApplyBindings(view, group, groupHeaderLayoutId);

            bindingsDictionary[view] = new BoundViewData(applicator, group);
            reverseLookup[group]     = view;

            return(view);
        }
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            View view = convertView ?? inflater.Inflate(layoutId, parent, false);

            TItem item = this[position];

            XmlBindingApplicator applicator;

            if (!bindingsDictionary.TryGetValue(view, out applicator))
            {
                applicator = new XmlBindingApplicator();
            }
            else
            {
                applicator.RemoveBindings();
            }

            applicator.ApplyBindings(view, item, layoutId);

            return(view);
        }