New Snippet New Snippet Recent Snippets Recent Snippets My Snippets My Snippets Web Code Search Snippets Search
Sign inor Register
Language: C#

Extensible Data Grid

158 Views
Copy Code Show/Hide Line Numbers
namespace ExtensibleGrid.GridLibrary
{
    public class ExtensibleDataGrid : DataGrid
    {
        private ConfigDialog dialog { get; set; }
        private IEnumerable<ExtensionItem> extensionItems;
    
        public override void OnApplyTemplate()
        {
            dialog = new ConfigDialog();
            dialog.OKButton.Click += new RoutedEventHandler(OKButton_Click);
            dialog.CancelButton.Click += new RoutedEventHandler(CancelButton_Click);
            Button ConfigButton = GetTemplateChild("ConfigButton") as Button;
 
            if (ConfigButton != null)
            {
                ConfigButton.Click += new RoutedEventHandler(ConfigButton_Click);
            }
            base.OnApplyTemplate();
        }
 
        void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            dialog.Close();
        }
 
        void OKButton_Click(object sender, RoutedEventArgs e)
        {
            foreach (var extensionItem in extensionItems)
            {
                if (extensionItem.Enabled == true && extensionItem.Activated == false)
                {
                    var extension = extensionItem.GridExtension.Value;
                    extension.Initialize(this);
                    extensionItem.Activated = true;
                }
            }
            
        }
 
        void ConfigButton_Click(object sender, RoutedEventArgs e)
        {
            dialog.DataContext = extensionItems;
            dialog.Show();
        }
 
        public ExtensibleDataGrid()
        {
            this.Loaded += new RoutedEventHandler(MefGrid_Loaded);
            DefaultStyleKey = typeof(ExtensibleDataGrid);
        }
 
        void MefGrid_Loaded(object sender, RoutedEventArgs e)
        {
            PartInitializer.SatisfyImports(this);
            extensionItems = Extensions.Select(ex => new ExtensionItem { GridExtension = ex }).ToArray();
        }
 
        [ImportMany]
        public IEnumerable<Lazy<IGridExtension, IGridExtensionMetadata>> Extensions { get; set; }
 
    }
}
by Glenn Block
  November 01, 2009 @ 7:21pm
Tags:

Add a comment


Report Abuse
brought to you by:
West Wind Techologies


If you find this site useful and use it frequently please consider making a donation to support this free service.
Donate