Связывание MVVM с (только) некоторыми столбцами, автоматически сгенерированными из коллекции - PullRequest
1 голос
/ 20 апреля 2011

У меня есть коллекция объектов, которые я хочу привязать к RadGridView (из набора инструментов Telerik). Класс объектов выглядит так (минимальный код, необходимый для понимания), где у меня есть 1 свойство и 1 массив значений, которые:

public class AttributeEntry : INotifyPropertyChanged
    {
        public string Code { get; set; }
        private string[] _values;
        public string[] Values
        {
            get { return _values; }
            set { _values = value; }
        }
        public string this[int index]
        {
            get { return _values[index]; }
            set
            {
                _values[index] = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(Binding.IndexerName));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

Кто-нибудь знает (простой) способ, используя паттерн MVVM, иметь RadGridView с определенными столбцами (в моем случае, соответствующими свойству «Код») и некоторые столбцы, «автоматически созданные» с каждым столбцом, соответствующим элементам коллекции (в моем случае это элементы массива «Значения». Если в моей коллекции 7 значений, у меня должно быть 7 «автоматически сгенерированных» столбцов)?

Ответы [ 3 ]

1 голос
/ 20 апреля 2011

Я предполагаю, что вы привязываете RadGridView к коллекции AttributeEntry.

В этом случае внедрите ITypedList в свою коллекцию. Вы можете использовать ITypedList для возврата виртуальных PropertyDescriptor, чьи методы GetValue и SetValue используют массив

1 голос
/ 16 июля 2012

Для тех, кто пытается реализовать это, объявите свой класс как расширяемый объект. Это гибкая структура класса с реализациями INotifyPropertyChanged, и вы можете определить свойства, как требуется в коде.

В telerik raddatagrid свяжите источник данных с коллекцией объектов расширения и установите для AutoGenerateColumns значение true.

Если вы хотите адаптировать столбцы в зависимости от содержимого объекта расширения, то используйте событие AutoGeneratingColumn, оно вызывается для каждой генерации столбца. Если вы определяете элементы управления столбцами как шаблоны данных, вы можете получить к ним доступ в коде и назначить их тоже шаблон ячейки.

0 голосов
/ 20 апреля 2011

Не уверен насчет RadGridView, но для обычного DataGrid вы можете установить свойство AutoGenerateColumns на true, чтобы автоматически генерировать столбцы на основе привязки данных, или false, чтобы создать столбцы на основе вашего кода. .

В вашем случае, я думаю, вы должны установить AutoGenerateColumns Свойство на false и определить свои столбцы самостоятельно, чтобы объединить оба (элементы вашей коллекции и свойство Code).

EDIT:

Только что проверил MSDN :

Явно объявленные поля столбца могут использоваться в сочетании с автоматически генерируемые поля столбцов. Когда оба используются явно объявленные поля столбца отображаются сначала следует автоматически сгенерированные поля столбцов.

...