2012-04-19 142 views
1

我有一个代码,其中绑定不起作用WPF DataGridTextColumn头绑定

<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

头不是在逻辑树... – 2012-04-19 22:26:29

回答

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(); 
    } 
} 
+0

嗨丹尼斯我很感谢为你的答案。 我在XAML已经代码 ' <区域:SelectCultureViewModel SelectedCulture = “HY-AM”/> '把你送我一个代码之后 和我得到一个错误 _Error “{LocalizedText}”值不是有效的MarkupExtension表达式。无法解析命名空间'http://schemas.microsoft.com/winfx/2006/xaml/presentation'中的'LocalizedText'。 'LocalizedText'必须是MarkupExtension的子类..._ – artos 2012-04-22 20:45:39

+0

哦,哎呀,我忘了把绑定在那里,哈哈,对不起:),所以把:DataContext =“{Binding LocalizedText}” – 2012-04-23 15:12:24