Извините за многословное название - я изо всех сил пытаюсь разобраться, если мои проблемы вызваны
- Плохой дизайн класса (вероятно)
- Невежество (очень вероятно)
- Оба (скорее всего)
Я потратил целую вечность на поиски в Google, но из-за не совсем понимания моей проблемы найти решение труднее.
По сути, у меня есть класс "День", у которого есть ObservableCollection of Period под названием Periods. Каждый период имеет продолжительность. У меня есть метод / свойство моего класса Day (TotalTimeUpUnTilThisPeriod), который принимает период и возвращает количество времени всех периодов до этой точки.
Мне нужно установить этот уровень периода, чтобы моя сетка данных могла связываться с ним (для источника данных установлено значение Day.Periods, а для текста данных установлено значение Day). Тем не менее, я должен выполнить вычисления в Day, поскольку экземпляры Period ничего не знают о своих братьях и сестрах, и это неправильно, если ребенок поднялся по дереву до уровня родителя и суммировал детей.
Я думаю так: у периода не должно быть "состояния", т.е. не знаю, где он находится в день по отношению к своим братьям и сестрам - это работа на уроке Day.
Итак, если мой классный дизайн правильный - тогда как я могу получить доступ к текстовому тексту в связанной колонке данных? Я пытался написать конвертер, который будет принимать период, а затем получить родительский текст данных (Day) и вызвать мой метод, чтобы вернуть строку для привязки на уровне периода), но я не мог понять, как заставить мой конвертер знать о datagrid datacontext и я хочу знать, нахожусь ли я на правильном пути.
Вероятно, это плохой дизайн, но я подумал о репликации родительского свойства (например, TotalTimeUpUnTilThisPeriod) в дочерний класс (Period), а затем каким-то образом устанавливал его всякий раз, когда продолжительность изменялась, так что я мог связываться с ней, но она становилась очень грязной.
Периоды могут быть добавлены / удалены из таблицы данных / дня, поэтому они не могут быть рассчитаны по загрузке строк - они должны быть динамическими (я думаю, я мог бы использовать LINQ для суммирования длин всех предыдущих периодов)
Так что я думаю, что мои вопросы:
- Мой классный дизайн выше нормально? (То есть.
дети не должны ничего знать о
родитель или их коллега
братья и сестры?)
- Если так, то как вы связываете
родительские свойства или методы в
сетка данных, если значение зависит от
состояние родителя?
Спасибо за любые указатели.
UPDATE
Вот еще несколько вещей, которые я пробовал в холодном свете дня:
1) Text= "{Binding DataContext.SomeTextField, ElementName=LayoutRoot}"
Это не работает - работает нормально, когда вне сетки данных, но не когда внутри.
2) Я попытался установить DataContext текстового поля в шаблонном столбце DataGrid - это работает хорошо, но затем мне нужно передать в строке datacontext И родительский datacontext преобразователю (чтобы посмотреть общее время для всех периоды до этого), и я не могу понять, как это сделать.
Таким образом, может возникнуть еще один вопрос - как передать текущий текст данных строки в конвертер И родительский текст данных (или просто «как сделать так, чтобы преобразователь знал о родительском тексте данных»).