将带有列表的对象绑定到DataGrid

时间:2014-05-11 19:33:38

标签: c# wpf binding datagrid

我有以下课程,其中包含一些列表:

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?

1 个答案:

答案 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