2009-11-18 3 views
11

Ho un DataGrid in WPF. E sto cercando di aggiungere Button s a determinate celle della griglia, dopo che è legato a un particolare ItemsSource. Ho cercato di farlo nel XAML come questo:Qual è il codice dietro per datagridtemplatecolumn e come usarlo?

<dg:DataGridTemplateColumn x:Name="R1" CanUserReorder="False" IsReadOnly="False">    
    <dg:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <awc:ImageButton Content="Edit" Name="btnEdit" Visibility="Collapsed"/> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellTemplate> 
</dg:DataGridTemplateColumn> 

Tuttavia, voglio sapere quanto a come posso fare questo nel codice dietro. Ho bisogno di questo in modo da poter inserire Button s ogni volta che si verifica un particolare clic. Qualsiasi aiuto sarà molto apprezzato.

risposta

22

uso questo:

DataGridTemplateColumn col1 = new DataGridTemplateColumn(); 
col1.Header = "MyHeader"; 
FrameworkElementFactory factory1 = new FrameworkElementFactory(typeof(CheckBox)); 
Binding b1 = new Binding("IsSelected"); 
b1.Mode = BindingMode.TwoWay; 
factory1.SetValue(CheckBox.IsCheckedProperty, b1); 
factory1.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(chkSelect_Checked)); 
DataTemplate cellTemplate1 = new DataTemplate(); 
cellTemplate1.VisualTree = factory1; 
col1.CellTemplate = cellTemplate1; 
dgTransportReqsts.DataGrid.Columns.Add(col1); 

Ho usato questo per aggiungere CheckBox nella mia DataGridTemplateColumn in fase di esecuzione. Spero che questo aiuti !!

+0

Siamo spiacenti per il bumping di un thread precedente, ma in caso di pulsante in 'FrameworkElementFactory (typeof (Button))', come faccio ad aggiungere il testo del pulsante? Non sono stato in grado di farlo, o mi manca qualcosa? –

+1

@Manish Sinha, usa factory1.SetValue (Pulsante.ContentProperty, b1); Puoi impostare qualsiasi proprietà di Button nel tuo caso nello stesso modo in cui sto impostando la proprietà IsChecked di CheckBox nell'esempio sopra. – viky

+0

Dolce! Così semplicemente !! Molte grazie. –

3

La risposta di Anurag funzionerà molto bene se si desidera aggiungere i pulsanti prima di creare un'istanza della griglia, in particolare prima di aggiungere la colonna alla griglia.

Se si desidera aggiungere il pulsante alla cella della griglia dopo aver già creato la griglia, è possibile farlo modificando l'oggetto DataGridCell. Prima di tutto bisogna trovare:

  1. Trova il DataGridCell utilizzando DataGridColumn.GetCellContent
  2. Usa VisualTreeHelper per eseguire la scansione l'albero visiva al DataGridCell

Una volta fatto questo, ci sono diversi modi per aggiungere un pulsante per DataGridCell, a seconda di cosa stai cercando di ottenere:

  • Set DataGridCell.Template t OA ControlTemplate che contiene i pulsanti e gli altri lo styling che desideri, OPPURE
  • Impostare DataGridCell.ContentTemplate ad un DataTemplate che contiene i pulsanti e altri oggetti che desideri, OPPURE
  • Avere del DataTemplate vostra colonna comprende un pannello di segnaposto per contenere nuovi pulsanti, cerca l'albero visivo per questo pannello di Name e aggiungi il tuo pulsante.

Un approccio alternativo che non richiede di trovare il cellulare è quello di:

  1. includono una ObservableCollection<T> proprietà nel modello visualizzazione che fornisce le informazioni per creare i pulsanti
  2. Nella vostra DataTemplate includono una ItemsControl che fa riferimento a questa proprietà e ha un DataTemplate che può creare il pulsante corretto di tipo T
  3. Quando si desidera aggiungere un pulsante, è sufficiente aggiungere un elemento allo ObservableCollection proprietà