2011-11-11 8 views
0

私は、(ViewModelからのイベントに基づいて)DataGrid列を動的に作成し、既存のDataGridにプログラムで追加しています。各列では、xamlで識別されたDataTemplateに汎用ヘッダーテンプレートを設定して使用します。 DataTemplateには、DataGrid列の作成時に内容を変更する必要がある2つのラベルが含まれています。これはどのようにして行われますか?私は、DataTemplateがContentPresenterを使用しているが、動的に作成されたDataGridカラム内でアクセスするのに問題があることを理解しています。コードは以下の通りである:DataGrid列ヘッダーで使用されるDataTemplate内からラベル内容をプログラムで変更する

XAML:(データグリッド列ヘッダをフォーマットするために使用されるテンプレート):

<DataTemplate x:Key="columnTemplate"> 
     <StackPanel> 
      <Label Padding="0" Name="labelA"/> 
      <Separator HorizontalAlignment="Stretch"/> 
      <Label Padding="0" Name="labelB"/> 
     </StackPanel> 
    </DataTemplate> 

C#の:(動的データグリッド列を作成し、既存のデータグリッドに追加するために使用される)

  var dataTemplate = FindResource("columnTemplate") as DataTemplate; 
      var column = new DataGridTextColumn(); 

      column.HeaderTemplate = dataTemplate; 
      DataGrid1.Columns.Add(column); 

私はlabelAとlabelBの両方にアクセスして内容を変更したいと思います。

答えて

1

実行時にテンプレートの内容を変更することはできません。ただし、そのテンプレートを使用するすべての項目の内容を変更する必要がある場合を除きます。

状況に応じて、必要に応じてヘッダーを作成します。ヘッダーを作成するためのコードを独自のメソッドに入れておくと、簡単に行うことができます。次に、あなたのヘッダーを適用する

public void AddColumnHeader(DataGridTextColumn column, string header1, string header2) 
{ 
    var panel = new StackPanel(); 

    var labelA = new Label(); 
    labelA.Content = header1; 
    panel.Children.Add(labelA); 

    var separator = new Separator(); 
    separator.HorizontalAlignment = HorizontalAlignment.Stretch; 
    panel.Children.Add(separator); 

    var labelB = new Label(); 
    labelB.Content = header2; 
    panel.Children.Add(labelB); 

    column.Header = panel; 
} 

は、ちょうど

var column = new DataGridTextColumn(); 
AddColumnHeader(column); 
DataGrid1.Columns.Add(column, "label content 1", "label content 2"); 
+0

を使用し、私はこれを試してみた、それは素晴らしい作品。再度、感謝します。 –

関連する問題