[英]Silverlight datagrid runtime adding and binding
我需要在运行时将列添加到silverlight列,还需要对这些列执行绑定。
这就是我在XAML中静态地做的方法
<sdk:DataGridTextColumn CanUserReorder="True" CanUserResize="True" CanUserSort="True" Header="CriteriaName" Width="2*" Binding="{Binding Path=[CriteriaName]}" IsReadOnly="True" />
现在我想在后面的代码中做同样的事情
这是我所做的
foreach(string Col in lColumnNames)
{
DataGridTextColumn DGCol=new DataGridTextColumn();
DGCol.Header= Col;
Binding lObjBinding = new Binding(Col);
lObjBinding.Mode = BindingMode.OneWay;
DGCol.Binding = lObjBinding;
GrdQuickFindResult.Columns.Add(DGCol);
}
这是行不通的。我只能看到DataGrid中的空白行,就好像绑定没有发生一样。 请检查并告诉我是否使用xaml完成的所有操作是否也使用C#完成,或者是否有一些属性需要在我创建的绑定对象中设置。 谢谢
像这样的绑定:
"{Binding Path=MyProperty}"
只是一种冗长的书写方式:
"{Binding MyProperty}"
用同样的方式
Binding b = new Binding();
是相同的
Binding b = new Binding("MyProperty");
并且意味着您将TextBoxColumn的文本绑定到数据对象中属性“ MyProperty”的值,该属性将被设置为DataGrid中一行的DataContext。 为此,我们假设您的数据对象类似于:
public class DataObject{
public object MyProperty {get; set;}
}
如果您的数据对象是这样的,则您后面的代码绑定很好,它们应该可以工作。
当您指定类似的绑定时:
"{Binding Path=[MyProperty]}"
要么
"{Binding [MyProperty]}"
您正在绑定数据对象的索引器 (如果它实现了一个索引 ),并访问与索引“ MyProperty”相对应的值。 如果这样做,我假设您的数据对象是IDictionary或实现索引器的类,例如:
public class DataObject{
public object this[object index]
{
get{ /*return something*/ }
set { /*set something*/ }
}
}
只是一个建议:对您的局部变量使用驼峰式大小写 ,对于其他查看您的代码的人来说似乎很奇怪,似乎它们是实例属性或静态字段。
foreach(string Col in lColumnNames)
{
DataGridTextColumn DGCol=new DataGridTextColumn();
DGCol.Header= Col;
Binding lObjBinding = new Binding();
lObjBinding.Mode = BindingMode.OneWay;
//=====This is what was missing======================//
lObjBinding.Path = new PropertyPath("["+Col+"]");
//==================================================//
DGCol.Binding = lObjBinding;
GrdQuickFindResult.Columns.Add(DGCol);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.