1

我有一个绑定不起作用的代码

<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 标题根本不起作用。

4

1 回答 1

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 ();
    }
}
于 2012-04-19T22:03:57.580 回答