WPF DataGrid绑定问题

时间:2009-09-28 13:51:43

标签: c# wpf xaml binding

假设我们在XAML中有以下代码(datagrid绑定到ObservableCollection,并且列绑定到ObservableCollection的属性:

<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 :(得分: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}"
/>

答案 1 :(得分:1)

我的代码与你几乎完全相同,我只是以稍微不同的方式创建绑定:

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

答案 2 :(得分:-3)

我的代码无效的原因是我没有为路径编写好的属性。 无论如何,谢谢你的建议!