WPF DataGridTextColumn标题绑定

时间:2012-04-19 21:26:27

标签: wpf binding datagrid header

我有一个Binding不起作用的代码

<DataGridTextColumn Header="{Binding LocalizedText.Task_Toolbar_AddButton}" />

按钮:

<Button x:Name="addTaskButton" Click="addTaskButton_Click">
<TextBlock Text="{Binding LocalizedText.Task_Toolbar_AddButton, Mode=OneWay}" />
</Button>

它工作正常,但对于datagrid标头根本不起作用。

1 个答案:

答案 0 :(得分:2)

查看Josh Smith关于DataContext Spy的博客,其中DataContextSpy类使用Hillberg的Freezable技巧从不在逻辑树中的对象访问继承上下文。 DataContextSpy非常简单,因此在许多情况下它应该是可重用的。

以下是如何在标题上使用它(我一直使用它,而不仅仅是在DataGrid.Headers上):

    <DataGrid...
    <DataGrid.Resources>
        <myNamespaces:DataContextSpy x:Key="dcSpy" DataContext="{LocalizedText}"/>
         .......

    <DataGridTemplateColumn Header="{Binding Source={StaticResource dcSpy}, Path=DataContext.Task_Toolbar_AddButton}">

修改 我似乎无法在他的博客上找到它,也许他已经存档了,所以在这里,我只是为你添加它。粘贴它,如上所示在XAML中引用它,然后使用它的DataContext来提取你想要绑定的数据:

public class DataContextSpy : Freezable
{
    public DataContextSpy ()
    {
        // This binding allows the spy to inherit a DataContext.
        BindingOperations.SetBinding (this, DataContextProperty, new Binding ());
    }

    public object DataContext
    {
        get { return GetValue (DataContextProperty); }
        set { SetValue (DataContextProperty, value); }
    }

    // Borrow the DataContext dependency property from FrameworkElement.
    public static readonly DependencyProperty DataContextProperty = FrameworkElement
        .DataContextProperty.AddOwner (typeof (DataContextSpy));

    protected override Freezable CreateInstanceCore ()
    {
        // We are required to override this abstract method.
        throw new NotImplementedException ();
    }
}