WPF c#,使用代码绑定DataGrid列

8
我有一个问题,如何将数据表格列绑定到集合?
 dataGrid1.Columns.Add(new DataGridTemplateColumn { Header="d", Binding = "RoomNumber"}); 

绑定不存在,我可以使用什么来进行绑定?

它完美地工作,但我需要在代码后台进行绑定。

 <DataGridTextColumn Header="Room Number" Binding="{Binding RoomNumber}"/>
5个回答

14

据我理解,您想从代码后台添加数据网格列,并且该列应该支持绑定的功能..?

这里有一个示例代码片段,可以从代码后台添加数据网格列:

 var col = new DataGridTextColumn();
            col.Header = "d";
            col.Binding = new Binding("RoomNumber");
            dataGrid1.Columns.Add(col);

使用此方法,您可以添加任意数量的列,并且可以在运行时为每个列提供数据绑定,还可以一次性指定项目源...

请确保在数据网格中将 AutoGenerateColumns="False" 标记,以便避免从项目源添加不需要的列。


3

bathineni(和其他人)的答案基本上是正确的,只要您在某个时刻将DataGrid的ItemsSource属性设置为您的集合。


1

无法将单个列与集合绑定。您必须将整个DataGrid与可以是集合或其他任何内容的itemssource绑定,然后将每个列与该集合的某个部分绑定。


Column.Binding = new Binding("RoomNumber"); 列。绑定=新绑定("房间号"); - Haris Hasan

0

刚刚浪费了几个小时才让这个工作起来,现在把我的起始代码作为示例添加进来,如果有人遇到问题可以参考一下。

基础模型:

public class SampleDataGridLine
{
    public SampleDataGridLine()
    {
        data = new string[6];
        for (int i = 0; i < 6; i++)
            data[i] = "n/a";
    }
    public string[] data;
    public string Cycle { get { return data[0]; } set { data[0] = value; } }
    public string a1 { get { return data[1]; } set { data[1] = value; } }
    public string a2 { get { return data[2]; } set { data[2] = value; } }
    public string a3 { get { return data[3]; } set { data[3] = value; } }
    public string a4 { get { return data[4]; } set { data[4] = value; } }
    public string a5 { get { return data[5]; } set { data[5] = value; } }
}

代码后台:

int runningIndex;
private void Button_Click(object sender, RoutedEventArgs e)
{
    string text = "a" + runningIndex;

    var col = new DataGridTextColumn();
    col.Header = text;
    col.Binding = new Binding(text);
    dataGrid.Columns.Add(col);

    runningIndex++;
}

界面:

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto"/>
    <RowDefinition/>
  </Grid.RowDefinitions>
  <StackPanel Grid.Row="0" Orientation="Vertical" Margin="20">
    <Button Click="Button_Click" Width="100" Height="30" Content="AddColumn"/>
  </StackPanel>
  <StackPanel Grid.Row="1" Orientation="Vertical" Margin="20">
    <DataGrid x:Name="dataGrid" AutoGenerateColumns="False">
      <DataGrid.Columns>
        <DataGridTextColumn Header="Cycle" Binding="{Binding Cycle}"/>
      </DataGrid.Columns>
    </DataGrid>
  </StackPanel>
</Grid>

我认为那些堆栈面板是不必要的。 - Steve

0
使用 DataGrid 的 ItemsSource 属性来将其绑定到一个集合。 MSDN 在 XAML 中的示例:
<DataGrid ItemsSource="{Binding Path=Tracks, IsAsync=True}" AutoGenerateColumns="False" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Song" Width="*" Binding="{Binding Name}" />
            <DataGridTextColumn Header="Artist"  Width="*" Binding="{Binding Artist}" />
            <DataGridTextColumn Header="Album" Width="*" Binding="{Binding Album}" />
        </DataGrid.Columns>
</DataGrid>

在后端代码中的示例:

dataGrid1.ItemsSource = tracks;

谢谢回复。那么我不能从代码后台逐个绑定DataGrid列到集合中吗? - Irakli Lekishvili

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接