当DataTemplate加载到代码后面时,转换器不工作

时间:2015-06-22 12:06:05

标签: c# data-binding

我在后面的代码中加载了image列的datatemplate。请参阅以下代码段

        FrameworkElementFactory fef = new FrameworkElementFactory(typeof(Image));
        Binding bind = new Binding() { Path=new PropertyPath(imagecolumn.MappingName),Converter = new StringToImageConverter(),Mode=BindingMode.TwoWay };         
        fef.SetBinding(Image.SourceProperty,new Binding(imagecolumn.MappingName));
        DataTemplate template = new DataTemplate() { VisualTree = fef };            
        this.imagecolumn.CellItemTemplate = template;          

但是我的转换器没有被调用。我需要在列的每一行加载不同的图像。我错过了什么吗?请分享任何想法

1 个答案:

答案 0 :(得分:1)

您实例化了一个新的Binding,但您永远不会使用它。这样做:

    FrameworkElementFactory fef = new FrameworkElementFactory(typeof(Image));
    Binding bind = new Binding() { Path=new PropertyPath("MappingName"),Converter = new StringToImageConverter(),Mode=BindingMode.TwoWay,Source=imagecolumn };         
    fef.SetBinding(Image.SourceProperty, bind); // here you just created 
    //another instance of Binding instead  of using your bind variable
    DataTemplate template = new DataTemplate() { VisualTree = fef };            
    this.imagecolumn.CellItemTemplate = template;  

编辑: 看看FrameworkElementFactory。在评论中,它是sais:

  

这个类是一种不常用的方式,以编程方式创建模板,模板是FrameworkTemplate的子类,如ControlTemplate或DataTemplate;使用此类创建模板时,并非所有模板功能都可用。以编程方式创建模板的推荐方法是使用XamlReader类的Load方法从字符串或内存流加载XAML。

也许你应该按照推荐的方式去做。