Привязка данных Winforms с наследованием интерфейса - PullRequest
3 голосов
/ 26 февраля 2010

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

Я работаю над приложением WinForms, которое использует привязку данных. Это в .net3.5 и нет, я не могу использовать wpf.

В любом случае, у меня есть что-то вроде этого.

public interface IClassOne
{
    string Prop1 { get; set; }
}

public interface IClassTwo : IClassOne
{
    string Prop2 { get; set; }
}

public abstract class ClassOne : IClassOne
{
    public string Prop1 { get; set; }
}

public class ClassTwo : ClassOne, IClassTwo
{
    public string Prop2 { get; set; }
}

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

Если бы я связывал данные со своей структурой класса выше, я бы связывался с IClassTwo. Проблема в том, что когда я привязываю данные к IClassTwo, я не вижу Prop1 ни в одной из дизайнерских операций для WinForms. Даже если я обойду это ограничение и получу контроль, связанный с Prop1, это не сработает.

Однако, если я связываю два ClassTwo, то привязка данных работает.

Я не хочу иметь дело с конкретными классами, потому что это усложнит использование макетов и тестирование. Я также не хочу помещать все на IClassTwo, потому что мне пришлось бы повторять код, когда я делаю другую конкретную реализацию.

Мне нужно знать, действительно ли это не работает. Если вы знаете, почему, это было бы бонусом.

Спасибо Tony

1 Ответ

1 голос
/ 01 марта 2010

http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/4151e6b6-44f7-45e2-9a8e-92c4f8539095/?prof=required

Вот фрагмент того, что публикуется на MSDN, почему это не работает. Постер, написавший это, называется "франкинг".

Нет, привязка к интерфейсу невозможна! BindingSource предлагает некоторую помощь по использованию типа в качестве источника данных. Внутренне он будет создавать экземпляр BindingList <>, используя информацию о типе. Также будет работать добавление новых элементов, но AddNew () не будет работать, если вы не подпишетесь на событие AddingNew.

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