NS.*_*.X. 4 wpf datatemplate datagridtemplatecolumn
问题:
有没有办法DataTemplate在XAML中定义一个并在代码中实例化它(而不是检索单例FindResource)并VisualTree在发送到DataTemplate需要的地方之前修改它,例如DataGridTemplateColumn.CellTemplate?
背景:
我通过自己添加列来显示一个二维数组data[][],并且在XAML中定义了一个知道如何呈现数组中每个元素的数组.但是,每个单元格的默认值是行,即.所以,我需要"参数"的由根视觉元素的设置为每列有约束力的地方是列索引.目前,每次都定义为返回同一实例并在其中检索.除了电话给我的树,而不是加载的本身.我正在寻找一种方法来实例化代码,进行所需的修改并设置为.DataGridDataGridTemplateColumnDataTemplateDataContextdata[x]DataTemplateDataContext"[y]"yDataTemplateDataGrid.ResourcesFindResource()LoadContent()UIElementVisualTreeDataTemplateDataTemplateDataGridTemplateColumn.CellTemplate
受Sisyphe的回答启发,我发现了这种更便携的解决方案:
public class DataGridBoundTemplateColumn : DataGridTemplateColumn
{
public string BindingPath { get; set; }
protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem)
{
var element = base.GenerateEditingElement(cell, dataItem);
element.SetBinding(ContentPresenter.ContentProperty, new Binding(this.BindingPath));
return element;
}
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
var element = base.GenerateElement(cell, dataItem);
element.SetBinding(ContentPresenter.ContentProperty, new Binding(this.BindingPath));
return element;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
var cellTemplate = (DataTemplate)this.dataGrid.FindResource("cellTemplate");
foreach (var c in data.Columns)
{
var col = new DataGridBoundTemplateColumn
{
Header = c.HeaderText,
CellTemplate = cellTemplate,
BindingPath = string.Format("[{0}]", c.Index)
};
this.dataGrid.Columns.Add(col);
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助那些与我的问题具有相同要求的人.
| 归档时间: |
|
| 查看次数: |
2825 次 |
| 最近记录: |