WPF: Как мне отредактировать свойства столбца базового / родительского класса в дочернем классе через редактор свойств / XAML? - PullRequest
2 голосов
/ 03 октября 2009

Я создал класс с именем ProductionDataUserControlBase, и он является производным от класса UserControl. Этот базовый класс не имеет XAML. Его цель - действовать в качестве базового класса для сетки, которую я инкапсулирую внутри класса, чтобы ее можно было изменить, когда класс наследуется позже. Внутри конструктора базового класса я также создаю столбцы и добавляю их в коллекцию Grid. Я создал открытое свойство Columns и все, что он делает - возвращает (получает) коллекцию свойств Columns сетки.

Я создал дочерний класс, производный от ProductionDataUserControlBase и содержащий XAML. В редакторе свойств унаследованного элемента управления существует моя коллекция Columns. Я могу открыть коллекцию через редактор свойств и добавить новые столбцы. Однако редактор столбцов не содержит столбцы, которые я добавил в основание, хотя я могу визуально видеть столбцы на холсте.

Я предполагаю, что это потому, что столбцы, которые я добавил в базу, не находятся в XAML дочернего элемента. Если я добавлю столбцы через дочерний XAML, он создаст дубликаты столбцов, потому что они были добавлены в базу. Как я могу отредактировать свойство столбцов, которые были добавлены в базу, без использования кода в дочернем элементе?

public partial class ProductionDataUserControlBase : UserControl
    {
        private RadGridView _grdProdData;
        private Boolean _InitCalled = false; //Boolean variable used to control whether init was previously called.
        //This is because the loaded event may be fired multiple times depending
        //on what type of control it's been placed into.

        public ProductionDataUserControlBase()
        {
            InitializeComponent();
        }        


        public Telerik.Windows.Controls.GridViewColumnCollection Columns
        {
            get
            {
                return _grdProdData.Columns;            
            }            
        }        

        protected virtual void InitializeComponent()
        {
            if (!_InitCalled)
            {                
                InitializeGrid();
                Columns = _grdProdData.Columns;
                this.AddChild(_grdProdData);                                                

                _InitCalled = true;
            }
        }

        private void InitializeGrid()
        {
            Telerik.Windows.Controls.GridViewColumn grdCol = null;

            this._grdProdData = new RadGridView();
            this._grdProdData.AutoGenerateColumns = false;

            grdCol = new Telerik.Windows.Controls.GridViewColumn() { HeaderText = "PSTAT", Name = "grdColPSTAT", UniqueName = "PSTAT" };
            _grdProdData.Columns.Add(grdCol);

            grdCol = new Telerik.Windows.Controls.GridViewColumn() { HeaderText = "PCONO", Name = "grdColPCONO", UniqueName = "PCONO" };
            _grdProdData.Columns.Add(grdCol);

         }

    }

<ProductionDataUserControlBase x:Class="AmerenProductionDataUserControl"    
            xmlns:MSControls="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns="clr-namespace:AmerenProductionDataUserControl;assembly=AmerenProductionDataUserControl" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation">

    </ProductionDataUserControlBase>

public partial class AmerenProductionDataUserControl : ProductionDataUserControlBase
        {

            public AmerenProductionDataUserControl()
            {
                InitializeComponent();                                            
            }
        }

1 Ответ

0 голосов
/ 12 октября 2009

Звучит так, будто вы либо переопределяете содержимое коллекции, либо переопределяете свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...