0

Je sais que c'est étrange ce que je fais mais je veux que cela fonctionne. Je me trompe quelque part.WPF DataTemplateColumn accéder à DataTemplate et définir ItemsSource

J'ai un DataTemplate défini dans mes ressources comme suit:

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="../ParameterEditorResourceDictionary.xaml"></ResourceDictionary> 
      <ResourceDictionary> 

       <DataTemplate x:Key="ParameterDefault"> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="("></TextBlock> 
         <ItemsControl ItemsSource="{//I need to set from code}"> 
          //some code here 
         </ItemsControl> 
         <TextBlock Text=")"></TextBlock> 
        </StackPanel> 
       </DataTemplate> 

      </ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary>  
</UserControl.Resources> 

J'ai un DataGrid défini dans mon XAML qui a un événement chargé.

<cc:PEDataGrid AutoGenerateColumns="False" 
       Loaded="CommonPEGrid_Loaded">   
</cc:PEDataGrid> 

Dans mon code de gestionnaire d'événements Je veux régler le ItemsSource de ItemsControl défini dans mon DataTemplate. Mon code ressemble derrière comme ceci:

private void CommonPEGrid_Loaded(object sender, RoutedEventArgs e) 
    { 
     int i = 0; 
     DataGrid dg = sender as DataGrid; 

     DataGridTemplateColumn column = null; 

     //ParametersAllLoops is a ObservableCollection 

     foreach (ParameterLoop obj in ParametersAllLoops) 
     { 
      column = new DataGridTemplateColumn(); 
      column.Header = "Loop (" + i.ToString() + ")"; 

      DataTemplate dt = null; 

      //Here I want to write code 
      //I want to access the DataTemplate defined in resources 
      //and set the ItemsSource of ItemsControl to something like this 
      // xxx.ItemsSource = obj; and then assign the DataTemplate to 
      //the CellTemplate of column. 
      //**Note :: ParameterLoop object has the IList Parameters** 


      column.CellTemplate = dt; 

      dg.Columns.Add(column); 
      i++;    
     } 
} 

Répondre

0

Vous pouvez trouver la ressource en utilisant la méthode FindResource() et de le jeter à DataTemplate mais pour l'assigner vous aurez besoin ItemSource la manipulation de chaînes. Il semblerait que vous vouliez avoir des colonnes dynamiques sur votre datagrid, je suggérerais que vous ayez généré le datatemplate dans le code afin que vous puissiez y résoudre vos chemins de liaison et vos noms de sources, puis les attacher comme gabarit de cellule ou cellule modifier le modèle.