2009-09-28 148 views
0

比方說,我們在XAML下面的代碼(DataGrid綁定到一個ObservableCollection和列到的ObservableCollection的屬性:WPF DataGrid的綁定問題

<WpfToolkit:DataGrid 
     ItemsSource="{Binding Path=Collection}" 
     HorizontalScrollBarVisibility="Hidden" SelectionMode="Extended" 
     CanUserAddRows="False" CanUserDeleteRows="False" 
     CanUserResizeRows="False" CanUserSortColumns="False" 
     AutoGenerateColumns="False" 
     RowHeaderWidth="17" RowHeight="25"> 
     <WpfToolkit:DataGrid.Columns> 

      <WpfToolkit:DataGridTextColumn 
       Header="Names" Width="2*" 
       Binding="{Binding Path=Name}"/> 

     </WpfToolkit:DataGrid.Columns> 
</WpfToolkit:DataGrid> 

你怎麼能編程在創建新列?C#與綁定集到一定的PropertyPath(對我來說一個ObservableCollection的屬性)

這就是我現在所擁有的:

Binding items = new Binding(); 
PropertyPath path = new PropertyPath("Name"); 
items.Path = path; 



MyDataGrid.Columns.Add(new DataGridTextColumn() 
{ 
    Header = "Names", 
    Width = 275, 
    Binding = items 
}); 

我很確定問題出現在PropertyPath中,但我不知道我必須寫什麼......

謝謝你的幫助!

回答

-3

的原因,我的代碼不能正常工作是我沒有爲這條道路寫出好的財產。 無論如何謝謝你的建議!

+0

也許這個答案是有用的,你可以寫出正確的屬性工作? – Maslow 2010-08-13 19:58:26

1

我在我的程序中這樣做。

我使用另一個數據網格和MVVM,但想法應該是相同的。

創建一個集合,它包含您需要的所有列,並將該集合綁定到xaml中的網格。

所以,在這種情況下,不要在xaml中定義列,只能在代碼中定義。

是這樣的:

<WpfToolkit:DataGrid 
     ItemsSource="{Binding Path=Collection}" 
     HorizontalScrollBarVisibility="Hidden" SelectionMode="Extended" 
     CanUserAddRows="False" CanUserDeleteRows="False" 
     CanUserResizeRows="False" CanUserSortColumns="False" 
     AutoGenerateColumns="False" 
     RowHeaderWidth="17" RowHeight="25" 
     Columns="{Binding Path=ColumnCollection}" 
/> 
+0

我在代碼中定義我的列...我需要知道如何將列綁定到集合屬性。在我的情況下,集合是包含屬性的某個類的ObservableCollection。 – Partial 2009-09-28 14:05:29

+0

WPFToolkik DataGrid不支持綁定到當前版本的列。也許很快? – 2009-09-28 14:33:39

+0

我使用infragistics-datagrid。 – Natrium 2009-09-29 05:58:47

1

我有幾乎相同的代碼爲你,我只是建立在一個稍微不同的方式結合:

void Add(ColumnViewModel columnViewModel) 
{ 
    var column = new DataGridTextColumn 
    { 
     Header = columnViewModel.Name, 
     Binding = new Binding("[" + columnViewModel.Name + "]") 
    }; 
    dataGrid.Columns.Add(column); 
}