绑定List时清空DataGrid

时间:2016-08-24 10:55:15

标签: c# wpf binding datagrid

我正在尝试绑定A类列表:

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

到我的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中的元素数)但是完全为空。

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

1 个答案:

答案 0 :(得分:3)

你的

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>的类,该类的实例应为DataContext实例的DataGrid