动态绑定 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);
我使用带有 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);