对不起这个冗长的标题-如果我的问题是由
-
劣质设计(可能)
-
无知(很可能)
-
两者(最有可能)
我花了很多年的时间在谷歌上,但是由于我不太了解我的问题,所以很难找到解决方法。
基本上,我有一个“日”类,它有一个可观察的周期集合,叫做周期。每个周期都有一段时间。我有一个day类的方法/属性(totalTimeupUntilthIsPeriod),它接受一个时间段,并返回到该时间点为止所有时间段的时间量。
不过,我需要将此时间段级别设置为数据报可以绑定到它(它的itemssource设置为day.period s,它的dataContext设置为day)。但是,我必须在白天进行计算,因为时段实例对其兄弟姐妹一无所知,如果一个孩子从树上走到父级并对这些孩子进行汇总,就会感觉不对。
我的想法是——一个时期不应该有“状态”,也就是说,不知道它在一天中相对于它的兄弟姐妹的位置——这是一天课的工作。
因此,如果我的类设计是正确的,那么如何访问绑定数据列中的DataContext?我试图编写一个转换器,它将占用一个时间段,然后获取父数据上下文(day),并调用我的方法返回一个要在时间段级别绑定到的字符串),但我不知道如何使转换器知道DataGrid数据上下文,我想知道我是否在正确的轨道上。
这可能是一个糟糕的设计,但我考虑复制子类(句点)中的父属性(例如totalTimeupUntilthIsPeriod),然后在每次更改句点时以某种方式设置它,以便我可以绑定到它,但它变得非常混乱。
周期可以从DataGrid/日中添加/删除,这样就不能在RowLoad上计算周期-它必须是动态的(我想我可以使用Linq来合计所有以前周期的长度)。
所以我想我的问题是:
-
我上面的班级设计可以吗?(I.
孩子们不应该知道
父母或他们的同伴
兄弟姐妹?)
-
如果是的话,那你是怎么绑定到
中的父属性或方法
如果值依赖于
父母的状况?
谢谢你的指点。
更新
:
以下是我在冷天里尝试过的一些事情:
1)
Text= "{Binding DataContext.SomeTextField, ElementName=LayoutRoot}"
这不起作用-它在DataGrid外部正常工作,但在内部不起作用。
2)我尝试在模板化的DataGrid列中设置文本框的DataContext-这很好地工作,但随后我需要将行DataContext和父DataContext传递给转换器(以便查找在此期间之前的所有期间的总时间),我无法确定如何执行此操作。
因此,另一个问题可能是-如何将当前行数据上下文传递给转换器和父数据上下文(或只是“如何使转换器了解父数据上下文”)。