查看 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 ();
}
}