2016-08-02 23 views
4

我試圖創建包含itemscontroldatagrid的自定義標頭,該標頭綁定到ObservableCollection<DateTime>如何使用Databound自定義DataGrid的標題Itemscontrol

(基本上,我想創建12列,每個月一個 - >見圖片)。

enter image description here

爲什麼這個代碼不工作?

代碼

<DataGrid x:Name="dgProjects" AutoGenerateColumns="False" ItemsSource="{Binding Projects}" AlternationCount="2" AlternatingRowBackground="LightGray"> 
     <DataGrid.Columns> 
... 
<DataGridTemplateColumn Width="*"> 
    <DataGridTemplateColumn.HeaderTemplate> 
     <DataTemplate> 
      <ItemsControl Grid.Row="1" ItemsSource="{Binding Path=Monate}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ActualWidth}"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <Canvas /> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Date}" Background="LightGreen" Margin="1"/> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </DataTemplate> 
    </DataGridTemplateColumn.HeaderTemplate> 

更新我將問題範圍縮小到綁定。下面的代碼工作FINDE

<DataGridTemplateColumn.HeaderTemplate> 
    <DataTemplate> 
     <Grid> 
      <ItemsControl ItemsSource="{Binding Projects}">        
       <TextBlock Text="asdf" Background="LightGreen" Margin="1"/> 
       <TextBlock Text="asdf" Background="LightGreen" Margin="1"/> 
       <TextBlock Text="asdf" Background="LightGreen" Margin="1"/> 
      </ItemsControl> 
     </Grid> 
    </DataTemplate> 
</DataGridTemplateColumn.HeaderTemplate> 

更新視圖模型

public class vmProjektplanung : INotifyPropertyChanged 
    { 
     ... 
    #region "Monate" 

    public event System.Collections.Specialized.NotifyCollectionChangedEventHandler OnMonateChanged; 

    private List<DateTime> monate; 

    public List<DateTime> Monate 
    { 
     get { return monate; } 
     set { monate = value; OnPropertyChanged(new PropertyChangedEventArgs("Monate")); } 
    } 

    private void Monate_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     OnMonateChanged?.Invoke(sender, e); 
    } 

    #endregion 
     ... 
    } 
+0

您如何使用該模板? – Johannes

+0

它位於DataGrid中。我只是更新了代碼。還是你的意思是別的? –

回答

2

有,因爲你對日期綁定不看數據方面的問題。

這應該通過名稱引用數據網格來解決問題。

<DataTemplate> 
     <ItemsControl ItemsSource="{Binding DataContext.Monate, ElementName=dgProjects}" 
+0

這個伎倆。但是,我有問題遵循它背後的邏輯。該模板是在網格中指定的,那麼爲什麼我必須重新命名呢? –

+0

datacontext沒有被繼承,唯一的一點是恢復* lost * datacontext ...也許另一個例子[這裏](https://social.msdn.microsoft.com/Forums/vstudio/en-US/12a5277f- 16df-4899-9cad-b82c57e8fd9b/datacontext-lost-in-headertemplate?forum = wpf)他們說的地方......「標題的源對象沒有明顯的選擇。除非在這種情況下,有一種方法這將解釋爲什麼你的HeaderTemplate不是簡單地從頂層繼承DataContext「(當然這是一種不同的情況) – 2016-09-11 10:32:51

相關問題