【发布时间】:2011-08-23 19:10:57
【问题描述】:
我需要将一些数据绑定到具有可变列数的 DataGrid。我使用以下代码使其工作:
int n = 0;
foreach (string title in TitleList)
{
DataGridTextColumn col = new DataGridTextColumn();
col.Header = title;
Binding binding = new Binding(string.Format("DataList[{0}]", n++));
binding.Mode = BindingMode.TwoWay;
col.Binding = binding;
grid.Columns.Add(col);
}
其中 DataList 声明为:
public ObservableCollection<double> DataList { get; set; }
并且 TitleList 被声明为:
public ObservableCollection<string> TitleList { get; set; }
问题是,即使我指定了 TwoWay 绑定,它实际上是单向的。当我单击单元格尝试编辑时,出现异常“此视图不允许'EditItem'”。我只是错过了绑定表达式中的某些内容吗?
附:我找到了 Deborah "Populating a DataGrid with Dynamic Columns in a Silverlight Application using MVVM" 的一篇文章。但是,我很难让它适用于我的情况(具体来说,我无法使标题绑定工作)。即使它有效,我仍然面临单元格样式不一致等问题。这就是为什么我想知道我是否可以使上面的代码工作 - 稍微调整一下?
编辑:我发现了另一个可能与我的问题有关的帖子:Implicit Two Way binding。它看起来是否使用
将字符串列表绑定到 TextBox<TextBox Text="{Binding}"/>
您将收到类似“双向绑定需要路径或 XPath”的错误。但是使用
可以很容易地解决这个问题<TextBox Text="{Binding Path=DataContext, RelativeSource={RelativeSource Self}}"/>
或
<TextBox Text="{Binding .}"/>
如果我的问题可以用类似的方式解决,谁能给我一个提示?
【问题讨论】:
-
我编辑我的答案问题是你的收藏类型是双倍的。
标签: wpf binding datagrid two-way