WPF DataGrid绑定困难

时间:2012-06-16 13:28:47

标签: wpf data-binding datagrid

这是班级:

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中。可能导致问题的原因是什么?

2 个答案:

答案 0 :(得分:1)

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

语法是这样的,但这只是来自内存。 文本需要绑定到训练路径

使用DataGridTextColumn Binding

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

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

答案 1 :(得分:1)

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

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

您还需要为INotifyPropertyChanged类实现TrainingData接口,而不是使用集合List<TrainingData>最好使用ObservableCollection<TrainingData>集合对象。这个MSDN article提供了DataBinding概述以及您希望在自定义类中使用上述接口的原因。