2012-04-19 141 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