Привязка данных к свойствам объекта, который реализует IEnumerable - PullRequest
2 голосов
/ 26 августа 2009

Я пытаюсь сделать простую привязку данных к экземпляру объекта. Примерно так:

public class Foo : INotifyPropertyChanged
{
    private int bar;
    public int Bar { /* snip code to get, set, and fire event */ }

    public event PropertyChangedEventHandler PropertyChanged;
}

// Code from main form
public Form1()
{
    InitializeComponent();
    Foo foo = new Foo();
    label1.DataBindings.Add("Text", foo, "Bar");
}

Это работает, пока я не изменю класс Foo для реализации IEnumerable, где T - это int, string, что угодно. В этот момент я получаю ArgumentException при попытке добавить привязку данных: Невозможно привязать свойство или столбец Bar в DataSource.

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

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

Вот два связанных вопроса:

1 Ответ

0 голосов
/ 26 августа 2009

Возможно, вы можете создать дочерний класс, содержащийся в вашем классе, который наследует от ienumerable и привязывается к нему. вроде как:

class A : IEnumerable { ... }
class Foo : A
{
   private B _Abar = new B();
   public B ABar
   {
      get { return _Abar; }
   }
}

class B : INotifyPropertyChanged
{
   public int Bar { ... }
   ...
}

public Form1()
{
    InitializeComponent();
    Foo foo = new Foo();
    label1.DataBindings.Add("Text", foo.ABar, "Bar");
}

Это должно сработать.

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