我有以下课程,其中包含一些列表:
public class Trajectory
{
public List<double> Radii { get; set; }
public List<double> Phis { get; set; }
}
我想要一个看起来像这样的DataGrid:
| Radii | Phis |
----------------
| 4.5 | 10 |
| 5.5 | 20 |
| 6.5 | 30 |
| 7.5 | 40 |
到目前为止我所做的是在我的xaml中有两个DataGrid
:
<DataGrid x:Name="TrajectoryRadiiDataGrid">
<DataGrid x:Name="TrajectoryPhiDataGrid"/>
在代码隐藏中:
Trajectory trajectory = new Trajectory() { Radii = new List<double>() { 4.5, 5.5, 6.5, 7.5 }, Phis = new List<double>() { 10, 20, 30, 40} };
DataGridTextColumn radiusColumn = new DataGridTextColumn();
radiusColumn.Header = "Radii";
radiusColumn.Binding = new Binding("");
TrajectoryRadiiDataGrid.Columns.Add(radiusColumn);
TrajectoryRadiiDataGrid.ItemsSource = trajectory.Radii;
DataGridTextColumn phiColumn = new DataGridTextColumn();
phiColumn.Header = "Phis";
phiColumn.Binding = new Binding("");
TrajectoryPhiDataGrid.Columns.Add(phiColumn);
TrajectoryPhiDataGrid.ItemsSource = trajectory.Phis;
但这不可能是圣杯!
主要缺点:这不允许使用TwoWay Binding,因为这需要一个Path!
对于允许TwoWay绑定的整个对象,是否有可能一个 DataGrid
?
重要:这是一个非常简单的模型。我知道我可以制作积分清单。
public class Trajectory
{
public List<Point> points { get; set; }
}
将该列表绑定到DataGrid。 但这在我的申请中是不可能的!
所以问题是:如何将两个列表绑定到DataGrid?
答案 0 :(得分:0)
DataTable DT = new DataTable();
DT.Columns.Add ("Radii");
DT.Columns.Add ("Phis");
if (Radii.Count == Phis.Count ) {
for (int i = 0; i < Radii.Count; i++ ) {
DT.Columns.Rows.Add(new String[] {Radii[i].ToString(), Phis[i].ToString()})
}
}
DataGrid DG = new DataGrid();
DG.ItemsSource = DT.DefaultView;
第二个问题:
DataRow row = (DataRow)DG.ItemContainerGenerator.Items[i];
var V1 = row.Column["Radii"]
var V2 = row.Column["Phis"]
// Store them in a new object
// if you wanna compare data use a loop or Linq