2011-03-09 6 views
1

Je dois avoir une sorte de datpicker dans mon en-tête DataGrid pour l'une des colonnes. Lorsque l'utilisateur sélectionne la date de cet en-tête datepicker, le système doit lier cette date à toutes les cellules de la colonne avec la date.
Y a-t-il un moyen de le faire?HeaderTemplate dans DataGrid WPF

Répondre

7

la meilleure façon est de mettre datatemplate à un modèle personnalisé de l'en-tête contenant un DatePicker dont la date est lié à l'une des propriétés de l'DataGrid DataContext, puis lier les cellules dans cette colonne spécifique à la même propriété.

quelque chose comme ceci:

<DataGrid> 
     <DataGridTextColumn Binding="{Binding DataContext.myDate, RelativeSource={RelativeSource AncestorType=DataGrid}, Mode=OneWay}" > 
      <DataGridTextColumn.HeaderStyle> 
       <Style TargetType="{x:Type DataGridColumnHeader}"> 
        <Style.Setters> 
         <Setter Property="ContentTemplate"> 
          <Setter.Value> 
           <DataTemplate> 
            <DatePicker SelectedDate={Binding myDate, Mode=TwoWay} /> 
           </DataTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style.Setters> 
       </Style> 
      </DataGridTextColumn.HeaderStyle> 
     </DataGridTextColumn> 
    </DataGrid> 

Disclaimer: Je n'ai pas essayé cela et ne suis pas sûr de la chose {Binding DataContext.myDate, RelativeSource={RelativeSource AncestorType=DataGrid}. Vous auriez probablement à faire quelques ajustements, mais dans l'ensemble, cela devrait vous donner un début sur la façon de procéder

2

Vous pouvez modifier l'en-tête de la colonne pour que DataGrid inclue un DateTimePicker, puis ajouter un événement de modification au DateTimePicker qui met à jour toutes les données de cette colonne lorsque les données changent.

<DataGridTextColumn Binding="{Binding Path=MyDate}"> 
    <DataGridTextColumn.Header> 
     <!-- Add Header Here w/ DateTimePicker --> 
    </DataGridTextColumn.Header> 
</DataGridTextColumn>