2012-12-12 106 views
0

我需要在運行時向silverlight列添加列,並且還要爲列執行綁定。Silverlight DataGrid運行時添加和綁定

這是我如何做到這一點靜態的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); 


      } 

這不是working.All我可以看到DataGrid中的空白行,就好像綁定沒有發生。請檢查並告訴我,如果使用xaml完成的所有操作都是使用C#完成的,還是有一些屬性需要在我創建的綁定對象中設置。 感謝名單

+0

您確定您的「Col」列名與您想要綁定的屬性名稱匹配嗎? –

+0

是的,我很確定,,,,,標題名稱和屬性名稱是相同的, –

+0

可以告訴我如何使用c#Binding =「{Binding Path = [CriteriaName]} wtite以下一段xaml代碼」 我如何設置路徑屬性。只是 綁定lObjBinding =新綁定(上校)沒有幫助 我試圖從xaml中刪除路徑關鍵字,我看到的是空行,因爲我看到當我使用後面的代碼綁定。 所以我覺得它因爲我不包括這個正確的 ** Binding =「{Binding Path = [CriteriaName]}」**使用c#。 @Arthur –

回答

0
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); 


      } 
1

綁定,如:

"{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;} 
} 

如果你的數據對象都是這樣的,你的代碼綁定的後面,是個好人,他們應該工作。

當你especify綁定,如:

"{Binding Path=[MyProperty]}" 

或者

"{Binding [MyProperty]}" 

你要綁定的數據對象的indexer(如果它實現了一個),並acessing對應值的索引「MyProperty」。如果你這樣做,我認爲你的數據對象是IDictionary的或它實現了一個索引,就像一個類:

public class DataObject{ 
    public object this[object index] 
    { 
     get{ /*return something*/ } 
     set { /*set something*/ } 
    } 
} 

只是一個建議:使用camel case你的局部變量,它看起來奇怪,其他人在看你的代碼,似乎它們是實例屬性或靜態字段。