我知道这不是最好的方法,但我有一个特殊的场合,我需要使用代码向数据网格添加新列并将绑定应用于
例如,我得到了这个:
<DataGrid x:Name="GridUtilisateurs" Grid.Row="1" Grid.Column="0" ItemsSource="{Binding}" Style="{StaticResource BaseGrid}">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Canvas Background="{Binding ColorActive}"></Canvas>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Usager" Width="*" MinWidth="50"
Binding="{Binding UserName}"
IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
我怎么能做同样的事情,但是用代码?我遇到的主要问题是绑定,所有其他问题似乎都很好。
这是我到目前为止所得到的,但我无法进行约束工作。我将在XAML中使用的绑定“路径”等同于oCol.ColumnName:
Dim oNewColumn As DataGridColumn Dim oBinding As New System.Windows.Data.Binding Select Case oCol.DataType Case GetType(Boolean) oNewColumn = New DataGridCheckBoxColumn() oNewColumn.MinWidth = 25 CType(oNewColumn, DataGridCheckBoxColumn).IsThreeState = False CType(oNewColumn, DataGridCheckBoxColumn).Binding = oBinding oNewColumn.Width = System.Windows.Controls.DataGridLength.SizeToHeader Case Else oNewColumn = New DataGridTextColumn() oNewColumn.MinWidth = 50 oNewColumn.Width = New System.Windows.Controls.DataGridLength(1, System.Windows.Controls.DataGridLengthUnitType.Star) CType(oNewColumn, DataGridTextColumn).Binding = oBinding End Select oNewColumn.Header = oCol.ColumnName GridData.Columns.Add(oNewColumn) Next GridData.ItemsSource = MyList
过了一会儿,我终于明白了什么是错的。我需要使用[描述],因为我得到了一个日期表。既然已经完成了,我还有另外一个问题。从某个时候我需要有日期,我需要使用DataTemplateColumn,我尝试使用一个,但到目前为止我还不能真正完成一个工作。谁知道怎么做? 谢谢,
答案 0 :(得分:1)
Dim oNewColumn As DataGridColumn
Dim oBinding As New System.Windows.Data.Binding
Select Case oCol.DataType
Case GetType(Boolean)
oNewColumn = New DataGridCheckBoxColumn()
oNewColumn.MinWidth = 25
CType(oNewColumn, DataGridCheckBoxColumn).IsThreeState = False
oBinding.Path ="PathName1"
CType(oNewColumn, DataGridCheckBoxColumn).Binding = oBinding
oNewColumn.Width = System.Windows.Controls.DataGridLength.SizeToHeader
Case Else
oNewColumn = New DataGridTextColumn()
oNewColumn.MinWidth = 50
oNewColumn.Width = New System.Windows.Controls.DataGridLength(1, System.Windows.Controls.DataGridLengthUnitType.Star)
oBinding.Path="PathName2"
CType(oNewColumn, DataGridTextColumn).Binding = oBinding
End Select
oNewColumn.Header = oCol.ColumnName
GridData.Columns.Add(oNewColumn)
Next
GridData.ItemsSource = MyList