动态绑定 GridView CellTemplate 内容

Dynamically bind GridView CellTemplate content

我使用带有 ListView 控件的 GridView 来显示一些目录内容。我正在使用隐藏代码动态加载 ListView 内容,创建 GridViewColumns 并将它们绑定到我的自定义 catListItem class.

中的属性
        var view = new GridView();

        var binding = new Binding("Name");
        var resElement = _mResourceManager.GetElementByMdlID("vlu_usw_name_of");
        view.Columns.Add(new GridViewColumn { Header = resElement.Name, DisplayMemberBinding = binding });

        binding = new Binding("Number");
        resElement = _mResourceManager.GetElementByMdlID("vlu_usw_arc_logical_nmbr");
        view.Columns.Add(new GridViewColumn { Header = resElement.Name, DisplayMemberBinding = binding });

一切都很好,但现在我正在尝试使用 GridViewColumn 的 CellTemplate 属性 添加带有一些图标的列。像这样:

var view = new GridView();

        var col = new GridViewColumn { Header = "" };
        var template = new System.Windows.DataTemplate(typeof(Image));

        col.CellTemplate = template;
        view.Columns.Add(col);

        var binding = new Binding("Name");
        var resElement = _mResourceManager.GetElementByMdlID("vlu_usw_name_of");
        view.Columns.Add(new GridViewColumn { Header = resElement.Name, DisplayMemberBinding = binding });

        binding = new Binding("Number");
        resElement = _mResourceManager.GetElementByMdlID("vlu_usw_arc_logical_nmbr");
        view.Columns.Add(new GridViewColumn { Header = resElement.Name, DisplayMemberBinding = binding });

我知道在使用 DisplayMemberBinding、CellTemplate 和 CellTemplateSelector 时有一个优先级。 所以我的问题是: 我如何创建(设置,...)CellTemplate 的内容并将其动态绑定到自定义 class 的 属性?我不知道我想念什么!我搜索了那个问题,但我发现的都是 XAML 使用 DataTemplate 的解决方案。 用代码隐藏来做这件事很重要。 提前致谢!

其实我找到了解决办法 HERE

我不得不使用 FrameworkElementFactory。这是我正在寻找的代码:

        var column = new GridViewColumn { Header = "" };
        var customTemplate = new System.Windows.DataTemplate();
        var efImage = new FrameworkElementFactory(typeof(Image));
        efImage.SetBinding(Image.SourceProperty, new Binding("Icon"));
        customTemplate.VisualTree = efImage;
        column.CellTemplate = customTemplate;
        view.Columns.Add(column);