3

実行時まで列がわからないため、プログラムでDataGridに列を追加しようとしています。私はそこにほとんどの方法を持っており、コードビハインドから「通常の」列を追加することは問題ではありません。ただし、追加しようとしている列にはDataTemplateがあります。XAMLは次のとおりです。

<DataGridTemplateColumn Header="{Binding colHeader}">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Border BorderBrush="{Binding BorderColour}" BorderThickness="2">
                <TextBlock Text="{Binding TextInfo}" />
            </Border>
        </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>

通常、私は次のようなものを使用して、グリッドに追加する列を作成します。

Private Function AddColumn(colHeader As String, colBinding As String) As DataGridColumn
    Dim textColumn As New DataGridTextColumn()
    textColumn.Header = colHeader
    textColumn.Binding = New Binding(colBinding)
    Return textColumn
End Sub

しかし、より複雑なXAMLを追加する方法については困惑しています。助言がありますか?

助けてくれてありがとう!

4

2 に答える 2

5

プロパティを使用してリソース ディクショナリで列の DataTemplate を定義しx:Key、コード ビハインドでアクセスしてセル テンプレートを設定します。

<DataTemplate x:Key="your_data_template">
    <Border BorderBrush="{Binding BorderColour}" BorderThickness="2">
        <TextBlock Text="{Binding TextInfo}" />
    </Border>
</DataTemplate>

次に、コードビハインドで

textColumn.CellTemplate = Application.Current.FindResource("your_data_template") as DataTemplate
于 2012-12-04T11:17:56.943 に答える
0

リンクを参照してください: http://blogs.msdn.com/b/scmorris/archive/2008/04/14/defining-silverlight-datagrid-columns-at-runtime.aspx

コードスニペットは上記のリンクからのものです:(これはそれを行う1つの方法です.Otherwayもそのリンクで説明されています)

Xaml:

<UserControl.Resources>
<local:DateTimeConverter x:Key="DateConverter" />

<DataTemplate x:Key="myCellTemplate">
    <TextBlock 
        Text="{Binding Birthday, 
        Converter={StaticResource DateConverter}}" 
        Margin="4"/>
</DataTemplate>

<DataTemplate x:Key="myCellEditingTemplate">
    <basics:DatePicker 
        SelectedDate="{Binding Birthday, Mode=TwoWay}" />
</DataTemplate>

コードビハインド:

DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "Birthday";
templateColumn.CellTemplate = (DataTemplate)Resources["myCellTemplate"];
templateColumn.CellEditingTemplate = 
                   (DataTemplate)Resources["myCellEditingTemplate"];
targetDataGrid.Columns.Add(templateColumn);
于 2012-12-04T12:18:04.840 に答える