我正在尝试绑定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的组合,因为这个视图似乎很容易在网上得到问题,但都无济于事。
答案 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
。