I am using XAMLWriter to serialize some controls. It works well for other controls, but not for DataGrid. First thing, it can not serialize DataGrid columns, which is very annoying(if somebody has a solution, great!), so I manage to find workaround.
This code:
DataGrid dataGrid = new DataGrid();
DataGridTextColumn dgTextColumn = new DataGridTextColumn();
dataGrid.Columns.Add(dgTextColumn);
XamlWriter.Save(dataGrid);
Produces this output: <DataGrid />
No columns at all!So, I figured out that I can add columns as items:
DataGrid dataGrid = new DataGrid();
DataGridTextColumn dgTextColumn = new DataGridTextColumn();
dataGrid.Items.Add(dgTextColumn);//notice the change
XamlWriter.Save(dataGrid);
And I got this output, which is enough for me:
<DataGrid >
<DataGridTextColumn />
</DataGrid>
Than I can manually add <DataGrid.Columns> and </DataGrid.Columns>
Can anyone explain me why is XAMLWriter behaving like this, and is there a way to successfully serialize DataGrid columns?
Columns and Items are not the same thing. Items property is for the data content of the datagrid. In your second code sample you are adding Columns as items.
See following for explanation why columns are not serialized and a solution: Cannot serialize DataGridTextColumn in DataGrid with XamlWriter.Save