0

我想让提供给 DataGrid 的数据决定它应该如何最好地呈现(也就是说,让数据随身携带一个将进行呈现的对象)。

例如,通过创建一个具有“renderer:IFactory”属性的“Renderable”接口,然后使用如下:

<mx:DataGrid x="0" y="0" width="100%" dataProvider="{myDataProvider}">
    <mx:columns>
    <mx:DataGridColumn headerText="Task" width="100"
        itemRenderer="{(data as Renderable).renderer}"/>
    </mx:columns>
</mx:DataGrid>

但要做到这一点,Renderable 必须扩展IEventDispatcher,这似乎有点……

我也尝试过使用:

itemRenderer="{(data as Renderable).getRenderer()}"

什么都不做(事实上,该getRenderer方法永远不会被调用)。

有一个更好的方法吗?我在做一些根本错误的事情吗?

谢谢!

4

2 回答 2

2

我可能是错的,但我认为您在上面的代码示例中引用的“数据”属性是您视图中顶级容器的“数据”,而不是 DataGrid 的特定行。我想到了其他一些方法:

  1. 实现单个项目渲染器类,该类检查传递给它的数据,并针对所提供的数据类型使用适当的项目渲染器。
  2. 在您的 DataGrid 视图中实现一个函数,该函数检查您的 dataProvider 并返回正确的项目渲染器类;使用绑定表达式在 DataGridColumn.itemRenderer 属性内调用它。
  3. 实现 DataGridColumn 的子类,其中包含用于设置正确 itemRenderer 的逻辑。

我实际上建议不要将特定于视图的“渲染器数据”与模型中的数据混合。除非您将核心模型数据与渲染器一起公开的对象包装(有些人称之为 ViewModel)。

于 2009-05-27T18:47:30.527 回答
0

使 getRenderer 成为 [Bindable] 属性

于 2009-05-27T18:45:58.330 回答