Привязка данных WinForms - привязка к объектам в списке - PullRequest
7 голосов
/ 02 марта 2009

Мне нужна помощь / руководство по привязке данных WinForms, и я не могу заставить Google помочь мне с этим.

Вот мой сценарий. Рассмотрим следующие классы, которые похожи на то, что мне нужно:

public class Car
{
    public string Name { get; set; }
    public List<Tire> Tires { get; set; }
}

public class Tire
{
    public double Pressure { get; set; }
}

Моими экземплярами этого будет объект класса Car со списком с четырьмя объектами Tire. Обратите внимание, что здесь у меня всегда будет известное количество объектов.

Теперь я хочу, чтобы данные связывали это с формой, содержащей пять текстовых полей. Одно текстовое поле с названием автомобиля и одно текстовое поле с каждым давлением в шинах.

Есть идеи, как заставить это работать? Конструктор в VS, похоже, не позволяет мне настроить это, назначая индексам списка, например, Tires [0] .Pressure.

Мое текущее решение заключается в привязке к «BindableCar», который будет выглядеть так:

public class BindableCar
{
    private Car _car;

    public BindableCar(Car car)
    {
        _car = car;
    }

    public string Name
    {
        get { return _car.Name; }
        set { _car.Name = value; }
    }

    public double Tire1Pressure
    {
        get { return _car.Tires[0].Pressure; }
        set { _car.Tires[0].Pressure = value; }
    }

    public double Tire2Pressure
    {
        get { return _car.Tires[1].Pressure; }
        set { _car.Tires[1].Pressure = value; }
    }

    public double Tire3Pressure
    {
        get { return _car.Tires[2].Pressure; }
        set { _car.Tires[2].Pressure = value; }
    }

    public double Tire4Pressure
    {
        get { return _car.Tires[3].Pressure; }
        set { _car.Tires[3].Pressure = value; }
    }
}

но это становится ужасно, когда в моих списках содержится 20 вместо 4 объектов, а для каждого из этих объектов я хочу связать 6 свойств. Это делает огромный "BindableObject"!

Ответы [ 2 ]

17 голосов
/ 02 марта 2009

Следует отметить, что вы можете связать элементы управления с любым типом объекта, который реализует интерфейсы IList, ICollection или IEnumerable или наследует от классов, которые реализуют эти интерфейсы. Универсальные коллекции также соответствуют этому виду переплета.

Они внутренне преобразуются в IBindingList экземпляр.

Проверьте следующие ссылки для получения дополнительной информации:

  1. Дорожная карта для привязки данных Windowsforms - Очень детально рассматривает реализацию и возможности и предоставляет различные ссылки на другие статьи базы знаний.
  2. Обвязка объекта Winforms - статья Рокфорда Лотки на эту тему. Предоставляет ориентированный на конструктор форм Windows способ реализации привязки данных.
  3. Привязка данных с помощью форм Windows 2.0 - В этой книге Брайана Нойеса рассматриваются различные аспекты привязки данных, как в сложных, так и в простых сценариях.
4 голосов
/ 02 марта 2009

Хотя дизайнер WinForms может не позволить вам сделать это, вы пытались настроить привязку в коде? Я полагаю, что нет проблем с привязкой текстового поля к someCar.Tires [1] .Pressure.

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