【问题标题】:WPF DataGrid binding difficultiesWPF DataGrid 绑定困难
【发布时间】:2012-06-16 13:28:47
【问题描述】:

这是课程:

public class TrainingData
{
    public string Training { get; set; }  
}

这是 MainWindow 中的其余代码:

Excel.Workbook xlWorkbook = xlApp.Workbooks.Open("D:/excel.xlsx");
Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;
List <TrainingData> tData= new List <TrainingData>();

int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;
//int k = 0; 

for (int i = 1; i <= rowCount; i++)
{
    tData.Add(new TrainingData() { Training = xlRange.Cells[i, 1].Value2.ToString() });
    //MessageBox.Show(tData[k].Training); 
    //k++;
}

Prikaz.ItemsSource = tData;

数据网格:

<DataGrid AutoGenerateColumns="False" Height="120" HorizontalAlignment="Left" Margin="12,12,0,0" Name="Prikaz" VerticalAlignment="Top" Width="105" ItemsSource="{Binding}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Header" />
                </DataGrid.Columns>
            </DataGrid>`

所以,Prikaz 是我的 DataGrid。 tData 是 TrainingData 对象的列表。如果我取消注释这三行,我可以测试我是否从 excel 文件中正确导入了信息,是的,它工作得很好。

那么为什么我的 DataGrid 是空的?它有正确的行数,只有一列,没关系,但里面没有数据。我使用这一行:Prikaz.ItemsSource = tData; 绑定我的对象列表和 DataGrid。训练被宣布为公开的,因此它应该出现在 DataGrid 中。什么可能导致问题?

【问题讨论】:

  • 能否提供网格的Xaml
  • 设置 AutoGeneratedColumns="True" 是否获取数据?

标签: wpf data-binding datagrid


【解决方案1】:

您需要将列路径绑定到属性Training。

语法是这样的,但这只是记忆中的。 文本需要绑定到路径Training

使用DataGridTextColumn Binding:

<DataTemplate>
    <TextBlock Text="{Binding Path=Training}"/>
</DataTemplate>

<DataGridTextColumn Header="Header" Binding="{Binding Path=Training}/>

【讨论】:

  • 这一行解决了问题:&lt;DataGridTextColumn Header="Header" Binding="{Binding Path=Training}/&gt;谢谢。
【解决方案2】:

虽然您已在代码中指定了 ItemsSource 属性,但您还需要提供与 DataGrid 中的列的绑定,并使用其属性连接到 ItemsSource 对象,如下所示:

<DataGrid.Columns>
    <DataGridTextColumn Header="Header" Binding="{Binding Path=Training}"/>
</DataGrid.Columns>

您还需要为您的TrainingData 类实现INotifyPropertyChanged 接口,并且使用ObservableCollection&lt;TrainingData&gt; 集合对象而不是使用集合List&lt;TrainingData&gt; 会更好。这个MSDN article 提供了DataBinding 的概述以及为什么要在自定义类中使用上述接口。

【讨论】:

    猜你喜欢
    • 2015-07-02
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2015-01-26
    • 2013-10-14
    相关资源
    最近更新 更多