2014-10-01 25 views
0

我有一個動態生成的DataGrid綁定到ViewModel中的DataTable屬性。DataGridColumnHeader與StackPanel,將TextBlock/Label的內容綁定到ColumnName,動態網格

我有AutoGenerateColumnHeaders = true,它工作正常。但是,我使用DataTemplate來覆蓋包含標籤和按鈕的StackPanel的標題。我似乎無法弄清楚如何將標籤內容綁定到DataGridColumnHeader。我曾嘗試與不FindAncestor,但我相信下面是最接近的地方,我必須......問題是標籤內容=「{}」

<local:UserControlViewBase.Resources> 
    <Style TargetType="DataGridColumnHeader"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate> 
        <Border BorderBrush="Black" BorderThickness="1"> 
         <StackPanel Width="Auto" Orientation="Horizontal"> 
          <Label Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type local:UserControlViewBase}},Path=DataContext.TestList.ColumnName}" Padding="12,0,12,0" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
          <Button Content="Ok" Padding="12,0,12,0" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
         </StackPanel> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</local:UserControlViewBase.Resources> 

//local:UserControlViewBase is just a UserControl with some extra bells and whistles added. 

我是相當新的WPF我假設我只是缺少一些具有約束力的東西 - 我還在學習。 謝謝。

+0

如果您希望標籤只顯示一下頭woulld有,只要使用'<標籤內容=「{結合}」',或者你需要從列表中獲得一定的價值? – 2014-10-01 19:37:07

+0

這是給我一個System.StackOverflow異常。 – Aaron 2014-10-01 19:45:31

+0

對不起,沒有什麼可以測試的,但'DataGridColumnHeader'是一個內容控件,並且由於模板內的任何內容都使用'DataGridColumnHeaders' dataContext,所以您應該可以綁定到它,也許試試'

回答

0

這是我所做的工作。我必須更改find​​ancestor以查找DataGridColumnHeader而不是用戶控件。然後我能夠訪問Column.Header屬性:

<local:UserControlViewBase.Resources> 
    <Style TargetType="DataGridColumnHeader"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate> 
        <Border BorderBrush="Black" BorderThickness="1"> 
         <StackPanel Width="Auto" Orientation="Horizontal"> 
          <Label Width="75" Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridColumnHeader}},Path=Column.Header}" Padding="12,0,12,0" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
          <Button Content="Ok" Padding="12,0,12,0" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
         </StackPanel> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</local:UserControlViewBase.Resources>