如何使用编程执行绑定

时间:2011-04-13 16:51:48

标签: wpf vb.net binding

我知道这不是最好的方法,但我有一个特殊的场合,我需要使用代码向数据网格添加新列并将绑定应用于

例如,我得到了这个:

<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,我尝试使用一个,但到目前为止我还不能真正完成一个工作。谁知道怎么做? 谢谢,

1 个答案:

答案 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