/// <summary>
        /// Constructs a new instance of the view model for the
        /// component catalog, which will be assigned to an instance
        /// of the plug-in catalog user control.
        /// </summary>
        /// <param name="catalog"></param>
        public AfxComponentCatalogViewModel(IAfxComponentCatalog catalog)
        {
            foreach (var package in catalog)
            {
                var packageModel = new ComponentPackage()
                {
                    Title = package.Title,
                    Items = new ObservableCollection<ComponentTemplate>()
                };

                foreach (var template in package)
                {
                    var templateModel = new ComponentTemplate()
                    {
                        Id = template.Id,
                        Name = template.Name,
                        Image = GetComponentBitmap(template, catalog)
                    };

                    packageModel.Items.Add(templateModel);
                }

                this._items.Add(packageModel);
            }
        }
        private BitmapImage GetComponentBitmap(AfxComponentTemplate template, IAfxComponentCatalog catalog)
        {
            var resolver = catalog.GetComponentResolver(template.Resolver);
            if (resolver != null)
            {
                return resolver.GetProperty(template.Id, "Component.Bitmap") as BitmapImage;
            }

            return null;
        }