2013-05-20 111 views
0

其實im面臨的問題與標題所說的略有不同。 我試圖回答下面的問題。觀的WPF Datagrid視圖頭綁定

Class PersonnelViewModel 
{ 

public SelectedPersonnelItem PersonnelItemViewModel; 

} 

Class PersonnelItemViewModel 
{ 

} 

數據上下文是而數據網格的項目源是SelectedPersonnelItem這是在類一個類型屬性。現在我想將網格列綁定到屬性defiend A。但它不作爲電網的背景是另一類(B)。我該如何解決這個問題?

XAML

<DataGrid Grid.Row="1" 
      SelectedItem="{Binding SelectedPersonnelItem}" 
      Name="PersonnelGrid" 
      ItemsSource="{Binding PersonnelGridData}" 
      event:DatagridRowDoubleClickHandler.MethodName="EditRecord" 
      CanUserAddRows="False"> 
    <DataGrid.Columns> 
    <DataGridTemplateColumn> 
     <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="{Binding IsItemChecked, UpdateSourceTrigger=PropertyChanged}"></CheckBox> 
     </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 
    <DataGridTextColumn Header="Name/Company" 
         Binding="{Binding Name}" /> 
    <DataGridTextColumn Header="Qualification" 
         Binding="{Binding Qualification}" /> 
    <DataGridTextColumn Header="Arrival" 
         Binding="{Binding ArrivalDate}" /> 
    <DataGridTextColumn Header="Departure" 
         Binding="{Binding DepartureDate}" /> 
    </DataGrid.Columns> 
</DataGrid> 
+0

無法理解你 – gasroot

+0

你怎麼填寫您datagird? – gasroot

+0

從您的XAML中,網格的datacontext是A,ItemsSource是PersonnelGridData。 SelectedItem被綁定到SelectedPersonnelItem。你可以檢查你的描述請 – cheedep

回答

2

最後我設法得到它的工作。如果我直接將該屬性綁定到列標題,則不填充該值。

我不得不這樣做如下:

<DataGridTextColumn Binding="{Binding Name}"> 
    <DataGridTextColumn.Header> 
     <TextBlock Text="{Binding DataContext.MyProp, 
         RelativeSource={RelativeSource FindAncestor, 
         AncestorType={x:Type Window}}}" /> 
    </DataGridTextColumn.Header> 
</DataGridTextColumn> 
+2

這裏的問題是''不是WPF的可視樹的一部分,因此當它用於生成UI組件時,它不像其他對象那樣訪問整個可視化樹。通過指定模板,它首先在可視樹中創建一個可以訪問其他對象以進行綁定的對象。 – Rachel

3

您可以訪問家長的DataContext使用

Binding="{Binding RelativeSource={RelativeSource FindAncestor, 
    AncestorType={x:Type DataGrid}}, Path=DataContext.ColumnName}" 

因此增加呈現出的屬性欄做

<DataGridTextColumn Header="Company" Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.Company}"/> 
+0

我給了這樣的事情,仍然沒有工作。 'Header =「{Binding RelativeSource = {RelativeSource FindAncestor, AncestorType = {x:Type DataGrid}},Path = PersonnelViewModel.Company}」' – Kurubaran

+0

我剛試過,它沒有工作。 – Kurubaran