`

自定义ClassFactory,让DataGrid动态改变Button或Image等属性II

阅读更多
上一期提到Flex3 自定义ClassFactory,让DataGrid动态改变Button或Image等属性。但后来发现,里面的icon都是预先定义好的才可以。如果是用户后来上传的图片,该怎么把这些图片动态运用到按钮上去?前面是用Embed绑定到一个Class上,但是这种代码我无法用AS动态写出来,比如讲Embed里面的source的值用一个变量来表示。后来同事提供了一个链接给我:http://blog.benstucki.net/?p=42,Ben Stucki 写了一个类IconUtility,里面有个static方法getClass返回了一个Class。有了它在运行时动态加载一个图片,换了原来按钮的图片是没有问题的!牛人啊,不愧是Flex Consultant!但是如果直接搬到我原来的代码里,是行不通的。原代码如下:
dgc = new DataGridColumn();      
      dgc.dataField = oColumnDef.id.datafield;         
     
      //MyButton 是自定义组件,在其中添加了一些事件
      var cf:ClassFactory=new MyClassFactory(MyButton,{label:"ok"},{icon:add});         
      dgc.itemRenderer=cf;                      
      }    
这里的add是一个已经绑定了图片的Class,用上牛人的方法要改写成如下:

dgc = new DataGridColumn();      
      dgc.dataField = oColumnDef.id.datafield;         
     
      //MyButton 是自定义组件,在其中添加了一些事件
      var cf:ClassFactory=new CMSClassFactory(MyButton,{label:"ok"},{icon:IconUtility.getClass(MyButton的实例, 'http://www.exampledomain.com/image.jp});         
      dgc.itemRenderer=cf;                      
      }   


问题出现了,这里如何得到MyButton的实例,我试了 new MyClassFactory(MyButton).newInstance(),无效。我后来又改写了我的MyClassFactory类

package com.yonghong.model
{
import mx.core.ClassFactory;

public class MyClassFactory extends ClassFactory
{
                  //styleCollection represents a collection of style
                  //properties represents a collection of property
private var styleCollection:Object;
public function CMSClassFactory(generator:Class=null,properties:Object=null,styleCollection:Object=null)
{
super(generator);
this.properties=properties;
this.styleCollection=styleCollection;

}

public override  function newInstance():*
    {
        var instance:Object = new generator();

        if (properties != null)
        {
            for (var p:String in properties)
            {
                instance[p] = properties[p];
            }
        }
        if(styleCollection != null){
        for(var s:String in styleCollection){
        if(s=="icon")
          instance.setStyle(s,IconUtility.getClass(instance as UIComponent,styleCollection[s]));
        else
          instance.setStyle(s,styleCollection[s]);
        }
        }

        return instance;
    }

下面是新的使用代码:
dgc = new DataGridColumn();      
      dgc.dataField = oColumnDef.id.datafield;         
     
      //MyButton 是自定义组件,在其中添加了一些事件
      var cf:ClassFactory=new CMSClassFactory(MyButton,{label:"ok"},{icon:"http://www.exampledomain.com/image.jp"});         
      dgc.itemRenderer=cf;                      
      }   

以上说出我的思路而已,某些代码还有待改善。希望可以帮到一些朋友!
分享到:
评论

相关推荐

    给DataGrid自定义Header功能

    - 在你的DataGrid配置对象中,为需要自定义的列设置`headerRenderer`属性,传入你之前创建的组件。 - 确保DataGrid能够识别并正确调用这个自定义渲染器。这通常涉及到在列定义对象中引入和引用你的组件。 3. **...

    DataGrid自定义列标题

    综上所述,通过各种方式我们可以实现DataGrid的自定义列标题,包括文本、样式、交互性和动态调整列宽等特性,以满足不同场景下的需求。在实际项目中,根据具体业务逻辑和界面设计灵活运用这些方法,能够打造出更加...

    WPF中的DataGrid、Button、ComboBox等样式+DataGrid分页控件

    在标题提到的“WPF中的DataGrid、Button、ComboBox等样式+DataGrid分页控件”中,我们将深入探讨这些关键组件以及如何自定义它们的样式和实现分页功能。 首先,DataGrid是WPF中用于展示和编辑表格数据的强大控件。...

    DataGrid模板列自定义控件

    依赖属性是WPF中数据绑定的基础,它提供了属性值的改变通知和值验证等功能。在自定义控件中,我们常常需要定义依赖属性以便与外部数据源进行绑定。定义依赖属性的步骤如下: 1. 使用DependencyProperty.Register方法...

    WPF中自定义复杂DataGrid列样式

    WPF中DataGrid控件有时需要在一列中显示多个字段数据,并实现一定的排版,本示例即为解决此类问题提供参考。

    自定义的 DataGrid样式

    自定义DataGrid样式可以帮助开发者根据应用程序的需求调整控件的外观和交互方式,使其更符合用户界面的设计规范。下面我们将深入探讨如何自定义DataGrid样式及其相关的知识点。 1. **创建资源字典** 自定义...

    WPF之DataGrid动态生成列实例

    5. **处理数据类型**:由于DataGrid默认可能无法正确处理所有数据类型,因此可能需要自定义CellTemplate或EditorTemplate来确保数据的正确显示和编辑。 6. **响应数据变化**:如果数据源支持INotifyPropertyChanged...

    自定义Datagrid

    在IT领域,自定义Datagrid是一项常见的需求,尤其是在开发数据密集型应用时。Datagrid是一种用于展示和操作表格数据的控件,它允许用户以视觉上友好的方式查看和交互大量结构化的信息。本资源围绕C#语言环境下的...

    wpf中datagrid动态设置单元格背景

    当我们需要根据数据的某些条件动态改变`DataGrid`中单元格的背景颜色时,就需要对控件进行一些定制化操作。以下将详细讲解如何实现这个功能。 首先,我们需要理解`DataGrid`的基本结构。`DataGrid`的每一行由多个`...

    wpf DataGrid 自定义样式!

    本篇文章将详细介绍如何利用 WPF 的 `ControlTemplate` 对 `DataGrid` 进行自定义样式,以及如何为特定行或列定制样式。 首先,`ControlTemplate` 是 WPF 中的一个重要概念,它允许我们完全重新定义控件的外观。...

    JS EasyUI DataGrid动态加载数据

    JS EasyUI DataGrid是一款基于jQuery和EasyUI框架的数据表格组件,它提供了丰富的功能,如数据分页、排序、过滤和自定义操作等。在实际应用中,动态加载数据是DataGrid的一个重要特性,允许用户在需要时加载更多的...

    easyui datagrid 动态隐藏显示列

    jquery easyui 扩展 datagrid 自定义动态隐藏显示列

    wpf 自定义ComBoBox带DataGrid

    在自定义的ComboBox中,我们可能会扩展其默认行为,例如添加搜索功能、自适应显示内容、或在下拉列表中集成更复杂的视图,如DataGrid。 **数据网格(DataGrid)**是用于显示和编辑结构化数据的控件,它允许用户对...

    WPF动态添加行列DATAGRID

    在某些场景下,我们可能需要根据程序运行时的条件或用户交互来动态地添加行列。本文将深入探讨如何在WPF中实现DataGrid的动态添加行列功能。 首先,我们需要理解DataGrid的基本用法。DataGrid可以通过绑定到一个...

    自定义asp.net中DataGrid的一个分页控件

    这可以通过设置控件的属性或使用CSS完成。 6. 其他功能扩展:你还可以添加跳转到指定页的功能,或者显示每页记录数的选择器,让用户体验更加完善。 7. 错误处理与优化:确保在处理数据时考虑异常情况,例如当用户...

    MVVM实现WPF中DataGrid动态列与编辑器

    10. **在View中使用**:最后,在XAML的View文件中,将ViewModel绑定到DataGrid的`ItemsSource`,并使用`DataTemplate`和`DataGrid.Columns`属性来引用ViewModel中动态生成的列和编辑模板。 通过以上步骤,你就能在...

    Flex 自定义Datagrid的ItemRender

    为了让自定义ItemRenderer与Datagrid的数据源进行通信,我们需要进行数据绑定。使用Flex的data属性将数据字段与ItemRenderer中的控件关联起来。例如,如果数据源中有一个名为`creationDate`的字段,可以这样绑定: ...

    Flex中如何创建自定义排序DataGrid控件的例子

    然而,有时我们可能需要对DataGrid的默认排序功能进行自定义,以满足特定的业务需求。本教程将详细讲解如何在Flex中创建一个自定义排序的DataGrid控件。 首先,我们需要了解Flex DataGrid的基本结构。DataGrid控件...

    datagrid 多表头及动态生成的实现

    - **使用`columns`属性指向函数**:在初始化datagrid组件时,设置`columns`属性指向一个函数,该函数负责动态生成列结构。 ```javascript $('#basicReport').datagrid({ // 其他配置项 columns: ...

    wpf动态列datagrid

    如果数据源是`ICollectionView`或实现了`IList`的对象,`DataGrid`会自动为每个属性创建一列。因此,动态列的关键在于数据源的设置和动态生成。 ```xml <DataGrid ItemsSource="{Binding Items}" ...

Global site tag (gtag.js) - Google Analytics