Как привязать GridView к списку нескольких типов? - PullRequest
2 голосов
/ 02 декабря 2008

Я получаю эту ошибку:

System.Reflection.TargetException: объект не соответствует типу цели.

при попытке связать List<IEvent>, где IEvent может быть назначением, днем ​​рождения или несколькими другими типами событий, связанных с календарем.

Ответы [ 3 ]

2 голосов
/ 02 декабря 2008

ChanChan, GridView не поддерживает привязку к коллекции интерфейсов, Попробуйте переназначить свое приложение, чтобы обеспечить привязку только к коллекции конкретных классов. Единственный обходной путь для этого - использовать базовый класс (в вашем случае Event) и привязать к коллекции событий.

        public  class Event
        {
            public  DateTime StartDate { get; set; }
        }
        public class Birthday : Event
        {       

            public DateTime? EndDate { get; set; }
        } 
        public class Appointment : Event
        {       

            public string Place { get; set; }
        }
        public class EventCollection : Collection<Event>
        {
            public static EventCollection GetEvents()
            {
                var events = new EventCollection();
                events.Add(new Birthday
                {
                     EndDate = DateTime.Now.AddDays(1),
                     StartDate = DateTime.Now
                });
                events.Add(new Appointment
                {
                    Place = "Gallery",
                    StartDate = DateTime.Now
                });
                return events;
             }
         }

Обратите внимание, что наследование от базовых классов создает отношение «является», но наследование из интерфейсов создает отношение «можно сделать». Другими словами, IMO, внедряющая IEvent будет плохой дизайн, так как День рождения - это событие. Я бы унаследовал от базового класса здесь.

Надеюсь, это поможет, Valve.

1 голос
/ 13 августа 2009

Немного трудно сделать это таким образом, но можно привязать список нескольких типов к GridView - вам просто нужно реализовать TypeDescriptionProvider для вашего базового типа.

Подробнее в этой статье: Полиморфные решения для связывания данных

0 голосов
/ 08 января 2009

Этого нельзя сделать, не используйте gridview, если вам нужна эта функциональность, это единственный способ обойти это.

...