0

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

        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 的内容并可能将其动态绑定到我的自定义类的属性?我不知道我错过了什么!我已经搜索过这个问题,但我发现的一切都是使用 DataTemplate 的 XAML 解决方案。用后面的代码来做这件事很重要。提前致谢!

4

1 回答 1

0

实际上我在 这里找到了解决方案

我不得不使用 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);
于 2015-06-03T13:46:01.870 回答