我有一个双列表,我需要以类似电子表格的方式显示,我不确定什么是最好的方法。
c#:
public class ViewModelClass
{
public List<ClassA> Data {get;set;}
//more code
}
public class ClassA
{
public string ColumnName {get;set;}
public List<ClassB> Values {get;set;}
//more code
}
public class ClassB
{
public string DisplayValue {get;set;}
//more code
}
应该显示为
要创建像图片中那样的表,必须重新设计类以表示基于行的数据结构。
如果您不想使用DataTable
作为DataGrid
的数据源,那么您的类必须被设计成包含每个映射到一个列的属性。默认情况下,属性的名称是列名。类本身代表一行。
下面的示例创建了一个类型,它有三个列,名为Item1…Item3:
class MyRowData : INotifyPropertyChanged
{
// TODO:: Let all property setters raise the PropertyChanged event
public string Item1 { get; set; }
public string Item2 { get; set; }
public string Item3 { get; set; }
}
这是你的基本数据结构。
要创建行,您需要创建MyRowData
的实例并将它们添加到绑定到DataGrid.ItemsSource
属性的集合中:
// ItemsSource for the DataGrid
public ObservableCollection<MyRowData> TableData { get; }
for (int i = 1; i < 4; i++)
{
var newRow = new MyRowData
{
Item1 = $"Value1.{i}",
Item2 = $"Value2.{i}",
Item3 = $"Value3.{i}"
};
this.TableData.Add(newRow);
}
要使DataGrid
能够使用修改的数据更新自己,您的数据模型(在本例中为MyRowData
)必须实现INotifyPropertyChanged
。