2009-09-28 144 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); 
}