Доступ к собственности внутри собственности - PullRequest
0 голосов
/ 29 сентября 2010

У меня сейчас есть установка, подобная приведенной ниже

public class ProptsClass
{
    public class ClassA 
    {
        public list<ClassB> pcb { get; set; }
    }

    public class ClassB
    {
        public list<ClassC> pcc { get; set; }
    }

    public class ClassC
    { 
        public string _someproperty { get; set; }
    }
}

что я хочу сделать, это привязать объект ClassA к ListView с одним из столбцов, привязанным к ClassC._someproperty. Когда я пытаюсь связать это как <%#Eval("Namespace.ProptsClass.ClassA.pcb.pcc._someproperty") %> Я получаю сообщение об ошибке: «DataBinding: Пространство имен ProptsClass.ClassA + ClassB» не содержит свойство с именем «_someproperty».

Может кто-нибудь сказать мне, где я делаю неправильно и как это правильно делать. во-вторых, есть ли лучший способ добиться того же в коде вместо ASP.net. Заранее спасибо

1 Ответ

4 голосов
/ 29 сентября 2010

Привязка данных в ListViews и GridViews только "поверхностный" поиск имен свойств / полей, к которым можно привязать столбцы.Кроме того, он не «сгладит» список списков, которые у вас есть в структуре.Если вы хотите привязать к многоуровневой объектной модели, вам нужно будет либо выставить дочернее свойство для родителя через свойство «сквозного доступа», либо спроецировать значения, которые вы хотите отобразить, в одномерную коллекцию представления."хелпер"Я бы выбрал последнее в вашем случае, так как вы хотите, чтобы значение элемента получало многомерный доступ.

Попробуйте это:

var displayResult = theProptsClass.A.pcb.SelectMany(b=>b.pcc).Select(c._someproperty);

Функция SelectMany () действует, чтобы "сгладить"связь между ClassB и ClassC и в сочетании с Select () вернет все значения _someproperty всех C во всех B в одном A. Вы можете связать другой вызов SelectMany (), если у вас есть коллекция As, из которой нужно проецироватьплоская коллекция Bs.

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