首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF分解- DataGridTemplateColumn

WPF分解- DataGridTemplateColumn
EN

Stack Overflow用户
提问于 2009-04-01 11:07:17
回答 2查看 2.7K关注 0票数 2

我正在尝试将自定义DataGrid列定义移动到UserControl中。

MyComboBoxColumn.xaml

代码语言:javascript
复制
<dg:DataGridTemplateColumn 
    x:Class="WpfDecomposition.MyComboBoxColumn"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:dg="clr-namespace:Microsoft.Windows.Controls;assembly=WpfToolkit"
    x:Name="_this"
    >

    <dg:DataGridTemplateColumn.Header>
        <Button Content="{Binding MyHeader, ElementName=_this}" ></Button>
    </dg:DataGridTemplateColumn.Header>

</dg:DataGridTemplateColumn>

MyComboBoxColumn.cs

代码语言:javascript
复制
public partial class MyComboBoxColumn : DataGridTemplateColumn
{
    public MyComboBoxColumn()
    {
        InitializeComponent();
    }

    public static DependencyProperty MyHeaderProperty = 
        DependencyProperty.Register("MyHeader", typeof(string), typeof(MyComboBoxColumn), new PropertyMetadata("TEST"));
}

主窗口XAML:

代码语言:javascript
复制
<dg:DataGrid CanUserAddRows="True" AutoGenerateColumns="False">
    <dg:DataGrid.Columns>
        <my:MyComboBoxColumn />
    </dg:DataGrid.Columns>
</dg:DataGrid>

我本希望在列的标题中看到一个按钮"TEST“,但我看到的却是空按钮。看起来捆绑坏了。怎么啦?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-04-01 11:39:55

它无法工作,因为它找不到名为_this的元素。当我在Visual Studio中调试您的代码时,在输出窗口中得到以下错误:

此System.Windows.Data错误:4:找不到具有引用‘ElementName=_

’的绑定的源。BindingExpression:Path=MyHeader;DataItem=null;目标元素是'Button‘(名称=’TestButton‘);目标属性是'Content’(类型为'Object')

至于为什么它找不到它-我认为这是因为WPF绑定使用可视化树来查找绑定的源代码。在这种情况下,MyComboBoxColumn不在可视化树中,因此它找不到具有该名称的元素。

我还尝试使用RelativeSource查找元素,但也不起作用--可能是出于同样的原因。

我唯一能做的就是在构造函数中将按钮的DataContext设置为列本身:

代码语言:javascript
复制
public MyComboBoxColumn()
{
    InitializeComponent();

    this.TestButton.DataContext = this;
}

然后更改XAML中的绑定:

代码语言:javascript
复制
<tk:DataGridTemplateColumn.Header>
    <Button Content="{Binding Path=MyHeader}" x:Name="TestButton" />
</tk:DataGridTemplateColumn.Header>

这似乎不是最好的方法,但至少它是有效的。

票数 2
EN

Stack Overflow用户

发布于 2010-10-13 16:34:33

如果您不想或不能在构造函数中设置DataContext (例如,在代码中动态创建列时),请将列的Header属性设置为要绑定到的对象(数据上下文),然后就可以在HeaderStyle数据模板中绑定到此对象。

详情请参见this question

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/705024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档