Управління колонками таблиць у Silverlight DataGrid (RadGridView, Columns, MVVM)

Нещодавно при розробці чергового проекту на Silverlight виникла деяка проблема. У силу того, що проект пишеться з використанням шаблону програмування під назвою Model-View-ViewModel (MVVM), а компонент RadGridView не має DependencyProperty під назвою ColumnCollection, довелося шукати просте і, головне, швидке вирішення цієї проблеми.

Опис проблеми

Нещодавно при розробці чергового проекту на Silverlight виникла деяка проблема. У силу того, що проект пишеться з використанням шаблону програмування під назвою Model-View-ViewModel (MVVM), а компонент RadGridView не має DependencyProperty під назвою ColumnCollection, довелося шукати просте і, головне, швидке вирішення цієї проблеми.

Вхідні дані

Є компонент для Silverlight від компанії Telerik, що зветься RadGridView. Існує потреба при використанні MVVM генерувати стовпчики для таблиці програмним способом. Бо тільки за програмної генерації колонок можна обробити метадані з RIA-сервісу і наділити колонки необхідними даними.

Опис способу вирішення

Найпростіше та швидке рішення – це зробити AttachedProperty, яке й керуватиме колонками. Отже, створимо клас RadGridViewHelper, який міститиме DependencyProperty під назвою ColumnsCollectionProperty. А при зміні значення цієї властивості ColumnsCollectionsChanged ми оновлюватимемо список колонок у об'єкта, до якого ця властивість “приточена”:

Зазначу щойно GridViewDataControl – це якраз і є RadGridView. Весь клас виглядає так:

Тепер тільки і залишається що використовувати нашклас-помічник у XAML підключивши потрібний простір імен:

У нашому випадку простір імен називається “gr >

Примітка: ColumnsGenerator – це клас, який, власне кажучи, робить обробку метаданих з RIA-сервісу і генерує колонки для таблиці. BridgeContext – це екземпляр класу DomainContext.