Привязка класса к свойству другого класса - PullRequest
1 голос
/ 28 февраля 2012

Название может звучать немного странно, поэтому я попытаюсь объяснить мою проблему:

Допустим, у меня есть класс, содержащий некоторую информацию:

class InfoHolder
{
  public int MyInfo1 {get; set;}
  public int MyInfo2 { get; set; }
}

Тогда у меня есть другой класс, который делает что-то с информацией:

class InfoGUIRepresenter
{
  // Display an int in some kind of GUI
  // Allow the user to change the int via the GUI
}

Теперь мне понадобятся два объекта класса-представителя, чтобы представить мой Инфо-класс пользователю: один представитель для каждой из двух сведений. Для этого было бы неплохо передать каждое из свойств как своего рода «параметр» моим классам-представителям. Но, конечно, это не возможно в C #. Другим решением было бы передать имена свойств, а затем использовать отражение для доступа к ним - не очень приятно!

Есть ли какое-нибудь решение для этого? Может быть, какая-то архитектура, которая решает эту проблему? Спасибо!

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012

Один из вариантов - передать двух делегатов - один для установщика и один для получателя:

var holder = new InfoHolder();

var representer = new InfoGUIRepresenter(() => holder.MyInfo1,
                                         value => holder.MyInfo1 = value);

Тогда ваш InfoGUIRepresenter конструктор будет иметь Func<int> и Action<int>. (Или вы можете сделать представитель универсальным для различных типов собственности.)

0 голосов
/ 28 февраля 2012

Вы упоминаете отображение "в каком-то графическом интерфейсе", что подразумевает, что вы используете инфраструктуру графического интерфейса.Конечно, эта структура поддерживает четко определенную модель для такого рода ситуаций.Например, MVVM, если вы используете WPF (ваши информационные объекты - это модели, ваш пользовательский интерфейс - это представление, и вы можете выполнять привязку от представления к модели через свойства модели представления, связанные со свойствами элемента пользовательского интерфейса).Т.е. вы не пытаетесь изобретать велосипед здесь?

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