绑定List时为空DataGrid

本文关键字:DataGrid List 绑定 | 更新日期: 2023-09-27 18:03:57

我正在尝试绑定类a的列表:

class ClassA
{
    public int Number;
    public int[,] AnArray;
}

To my DataGrid:

<DataGrid Name="ResultsDataGrid" DataContext="{Binding ResultsForGrid}"  ItemsSource="{Binding Path=ResultsForGrid}"  AutoGenerateColumns="False" Margin="0,10,176,0" Height="220.378" VerticalAlignment="Top" >
    <DataGrid.Columns>
        <DataGridTextColumn Header="Number"  Binding="{Binding Path=Number}"/>
        <DataGridTextColumn Header="Array Rows"  Binding="{Binding Path=AnArray.GetLength(0)}"/>
        <DataGridTextColumn Header="Array Columns"  Binding="{Binding Path=AnArray.GetLength(1)}"/>
    </DataGrid.Columns>
</DataGrid>

要绑定它,我使用List<ClassA> ResultsForGrid;,其中包含我想要在视图中显示的所有元素,并在我的窗口类中声明为全局变量。当我的列表充满了ClassA的所有元素时,我需要显示,我设置ItemsSource为

ResultsDataGrid.ItemsSource = ResultsForGrid;

奇怪的是,当我运行代码时,我得到一个dataGrid具有正确的标题和正确的行数(ResultsForGrid中的元素数),但完全为空。

我已经尝试了绑定和DataContext的许多组合,因为这个视图似乎很容易在网络上得到问题,但都无济于事。

绑定List时为空DataGrid

您的

class ClassA
{
    public int Number;
    public int[,] AnArray;
}

应该实现INotifyPropertyChanged,并且字段应该被属性替换:

private _number;
public int Number
{
    get { return _number; }
    set
    {
        _number= value;
        OnPropertyChanged();
    }
}

不能在XAML中使用方法:

<DataGridTextColumn Header="Array Rows"  Binding="{Binding Path=AnArray.GetLength(0)}"/>

创建一个属性来包装这个AnArray.GetLength(0)并绑定到这个属性。

您还需要包装List<ClassA>的类,该类的实例应该是您的DataGrid实例的DataContext