假设我们在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中,但我不知道我必须在其中写什么...
感谢您的帮助!
答案 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)
我的代码无效的原因是我没有为路径编写好的属性。 无论如何,谢谢你的建议!