Как получить доступ к значению на основе братьев и сестер или родителя в привязке - PullRequest
0 голосов
/ 25 июля 2010

Извините за многословное название - я изо всех сил пытаюсь разобраться, если мои проблемы вызваны

  1. Плохой дизайн класса (вероятно)
  2. Невежество (очень вероятно)
  3. Оба (скорее всего)

Я потратил целую вечность на поиски в Google, но из-за не совсем понимания моей проблемы найти решение труднее.

По сути, у меня есть класс "День", у которого есть ObservableCollection of Period под названием Periods. Каждый период имеет продолжительность. У меня есть метод / свойство моего класса Day (TotalTimeUpUnTilThisPeriod), который принимает период и возвращает количество времени всех периодов до этой точки.

Мне нужно установить этот уровень периода, чтобы моя сетка данных могла связываться с ним (для источника данных установлено значение Day.Periods, а для текста данных установлено значение Day). Тем не менее, я должен выполнить вычисления в Day, поскольку экземпляры Period ничего не знают о своих братьях и сестрах, и это неправильно, если ребенок поднялся по дереву до уровня родителя и суммировал детей.

Я думаю так: у периода не должно быть "состояния", т.е. не знаю, где он находится в день по отношению к своим братьям и сестрам - это работа на уроке Day.

Итак, если мой классный дизайн правильный - тогда как я могу получить доступ к текстовому тексту в связанной колонке данных? Я пытался написать конвертер, который будет принимать период, а затем получить родительский текст данных (Day) и вызвать мой метод, чтобы вернуть строку для привязки на уровне периода), но я не мог понять, как заставить мой конвертер знать о datagrid datacontext и я хочу знать, нахожусь ли я на правильном пути.

Вероятно, это плохой дизайн, но я подумал о репликации родительского свойства (например, TotalTimeUpUnTilThisPeriod) в дочерний класс (Period), а затем каким-то образом устанавливал его всякий раз, когда продолжительность изменялась, так что я мог связываться с ней, но она становилась очень грязной.

Периоды могут быть добавлены / удалены из таблицы данных / дня, поэтому они не могут быть рассчитаны по загрузке строк - они должны быть динамическими (я думаю, я мог бы использовать LINQ для суммирования длин всех предыдущих периодов)

Так что я думаю, что мои вопросы:

  1. Мой классный дизайн выше нормально? (То есть. дети не должны ничего знать о родитель или их коллега братья и сестры?)
  2. Если так, то как вы связываете родительские свойства или методы в сетка данных, если значение зависит от состояние родителя?

Спасибо за любые указатели.

UPDATE

Вот еще несколько вещей, которые я пробовал в холодном свете дня:

1) Text= "{Binding DataContext.SomeTextField, ElementName=LayoutRoot}"

Это не работает - работает нормально, когда вне сетки данных, но не когда внутри.

2) Я попытался установить DataContext текстового поля в шаблонном столбце DataGrid - это работает хорошо, но затем мне нужно передать в строке datacontext И родительский datacontext преобразователю (чтобы посмотреть общее время для всех периоды до этого), и я не могу понять, как это сделать.

Таким образом, может возникнуть еще один вопрос - как передать текущий текст данных строки в конвертер И родительский текст данных (или просто «как сделать так, чтобы преобразователь знал о родительском тексте данных»).

1 Ответ

0 голосов
/ 08 августа 2010

Вот что я сделал в конце - я хотел бы знать, является ли это хорошей практикой или нет:

Я сделал родительский класс свойством дочернего класса (это было так неправильно?) -теперь я могу ссылаться на свойства родителя в сетке данных.

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