【发布时间】:2014-06-29 02:32:34
【问题描述】:
我有以下包含一些列表的类:
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 中有两个 DataGrids:
<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;
但这不可能是圣杯!
还有一个主要缺点:这不允许双向绑定,因为这需要一个路径!
是否有可能为允许双向绑定的整个对象设置一个 DataGrid?
重要:这是一个非常简单的模型。我知道我可以列出点数。
public class Trajectory
{
public List<Point> points { get; set; }
}
然后将该列表绑定到 DataGrid。 但这在我的应用程序中是不可能的!
所以问题是:如何将两个列表绑定到 DataGrid?
【问题讨论】:
-
创建一个
Radius类并列出这些类。 -
@SLaks:请在底部查看我的编辑。
-
@Rico-E,最简单的方法是创建一些
RadiiPhis视图模型来存储两个属性,合并两个列表并绑定它。然后在需要单独的值时将其拆分。 -
@dkozl:这几乎与
List<Point>... -
@Rico-E,问题是
Point是一个结构(值类型),所以当 WPF 从绑定创建项目时,它将复制整个结构而不是仅引用,所以当您更改 @987654332 @它将更改副本,而不是您列表中的Point。无法进行双向绑定