[英]Add property at run-time
我有一个List<Data>
其中:
class Data
{
public string Name { get; set; }
}
我将此列表用作ListView
的ItemsSource
。
在View
我的ListView
是GridView
有一个GridViewColumn
(iniltially)和我绑定属性Data.Name
使用DisplayMemberBinding
我的GridViewColumn
。
在运行时, 可能发生了将新的GridViewColumn
添加到GridView
,因此我需要将Data
的新属性绑定到此新列。
我怎样才能做到这一点?
不,您不能在运行时添加“常规”属性-坦白地说,您所描述的可能要绑定到DataTable并映射数据。您可以在运行时执行此操作,但这非常复杂。 DataTable已经具有完整的实现。
编辑:看来我误解了这个问题。 如果您想向Data
类添加属性,那么我认为您很不走运。 如果您已经拥有该属性,并且只想将该现有属性绑定到GridView
,那么下面的代码应该会有所帮助。
假设已经设置了GridView的DataContext
,则可以使用类似于MSDN中的示例的方法:
GridViewColumn gvc = new GridViewColumn();
gvc.DisplayMemberBinding = new Binding("Surname");
gvc.Header = "Surname";
gvc.Width = 100;
myGridView.Columns.Add(gvc);
将实际属性添加到数据实例的解决方案相当复杂,
但也许这些解决方案之一就足够了
您可以使用动力学(更多详细信息在这里: dynamics )
dynamic dynamicData = new ExpandoObject();
dynamicData.Name = "Name";
dynamicData.Surname = "SomeSurname";
如果您可以重建数据项的集合,则可以使用匿名类型(更多详细信息请参见匿名类型 )
var data = new Data();
string newPropertyName = "Surname";
var data2 = new { Name = data.Name, newPropertyName = "SomeString" };
除非您使用DataTemplates绑定到数据的约束类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.