【发布时间】:2013-06-05 08:24:37
【问题描述】:
我想在运行时向 C# WPF ListView (GridView) 添加新的列和行。据我所知,您只能通过使用具有列绑定到的静态成员集的匿名对象或类来将行添加到网格视图。有没有办法在运行时让用户能够添加一个新列、将此列绑定到某些东西并添加新数据?
谢谢 奥伦茨基
【问题讨论】:
-
请更具体一些,展示一些示例代码。
我想在运行时向 C# WPF ListView (GridView) 添加新的列和行。据我所知,您只能通过使用具有列绑定到的静态成员集的匿名对象或类来将行添加到网格视图。有没有办法在运行时让用户能够添加一个新列、将此列绑定到某些东西并添加新数据?
谢谢 奥伦茨基
【问题讨论】:
是的,您可以在运行时代码中执行此操作。您需要将 GridView 作为变量(在 XAML 中为其命名以在 Visual Studio 中自动生成该变量)。 GridView 有一个 Columns 属性,您可以像处理任何其他集合一样处理它,例如,您可以添加和删除。
这是来自 MSDN 的示例(网格视图名称“myGridView”):
GridViewColumn gvc3 = new GridViewColumn();
gvc3.DisplayMemberBinding = new Binding("EmployeeNumber");
gvc3.Header = "Employee No.";
gvc3.Width = 100;
myGridView.Columns.Add(gvc3);
一般来说,您可以在 XAML 中执行的任何操作,都可以在代码中执行。
【讨论】:
ObservableCollection<object> oc = new ObservableCollection<object>(); 并添加匿名对象:oc.Add(new { col1 = "A", col2 = "B" });。如果我添加一个新列,我也想将数据添加到该新列中。我怎样才能做到这一点?匿名对象是静态的,不能在运行时更改。
if(c is TextBox)...
所以,this thread 中描述了我正在寻找的内容。 他创建了一个新的 Dictionary 类,它实现了INotifyPropertyChanged 接口。 向字典添加数据时会触发一个事件。
在代码中要添加新行的位置,只需将数据放入此 Dictionary 类的对象中,然后将 Dictionary 添加到绑定到 DataGrid 的 ObservableCollection 中。
【讨论】: