[英]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.