我有一个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标头根本不起作用。
答案 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 ();
}
}