Я создал FlowDocument с таблицей данных с привязкой к данным. Вывод в FlowDocumentScrollviewer выглядит следующим образом:
Далее мне нужно преобразовать этот FlowDocument в фиксированный документ (XPS), чтобы распечатать его на бумаге формата A4. Но как только я это сделаю, мои данные в DataGrid будут потеряны .
Вот мой XAML:
<Window x:Class="Test_Flow.Izpisi.DataGrid_DataTable"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Test_Flow.Izpisi"
mc:Ignorable="d"
Title="DataGrid_DataTable" Height="850" Width="850"
WindowStartupLocation="CenterScreen">
<Grid>
<FlowDocumentScrollViewer Name="Flow_reader" >
<FlowDocument Name="Flow_dokument" PageHeight="29.7cm" PageWidth="21cm" >
<Paragraph>Datagrid with DataTable example</Paragraph>
<BlockUIContainer>
<DataGrid BorderThickness="1" ItemsSource="{Binding Dt_Flow}" IsEnabled="False"
AutoGenerateColumns="False" HeadersVisibility="Column" BorderBrush="Black">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Number}"/>
<DataGridTextColumn Header="Surname" Binding="{Binding Surname}"/>
<DataGridTextColumn Header="Address" Binding="{Binding Address}"/>
<DataGridTextColumn Header="City" Binding="{Binding City}"/>
</DataGrid.Columns>
</DataGrid>
</BlockUIContainer>
</FlowDocument>
</FlowDocumentScrollViewer>
<DocumentViewer Name="doc_viewer" Visibility="Collapsed" />
</Grid>
</Window>
И мой View_Model :
class My_ViewModel : INotifyPropertyChanged
{
public My_ViewModel(DocumentViewer doc_viewer, FlowDocument dokument, FlowDocumentScrollViewer page_viewer)
{
Fill_Table(); //Fill some test data
//Convert to XPS and display It in DocumentViewer
Convert_to_XPS(doc_viewer, dokument, page_viewer);
}
public DataTable Dt_Flow { get; set; } //DataTable for FlowDocument
private void Convert_to_XPS(DocumentViewer doc_viewer, FlowDocument dokument, FlowDocumentScrollViewer page_viewer)
{
//Convert FlowDocument to XPS
MemoryStream ms = new MemoryStream();
Package pkg = Package.Open(ms, FileMode.Create, FileAccess.ReadWrite);
string pack = "pack://report.xps";
PackageStore.RemovePackage(new Uri(pack));
PackageStore.AddPackage(new Uri(pack), pkg);
XpsDocument doc = new XpsDocument(pkg, CompressionOption.Maximum, pack);
XpsSerializationManager rsm = new XpsSerializationManager(new XpsPackagingPolicy(doc), false);
DocumentPaginator paginator = ((IDocumentPaginatorSource)dokument).DocumentPaginator;
rsm.SaveAsXaml(paginator);
//Hide FlowDocumentScrollViwer and show DocumentViewer
page_viewer.Visibility = Visibility.Collapsed;
doc_viewer.Document = doc.GetFixedDocumentSequence();
doc_viewer.Visibility = Visibility.Visible;
}
private void Fill_table()
{
//Fill test table
Dt_Flow = new DataTable();
Dt_Flow.Columns.Add("Number");
Dt_Flow.Columns.Add("Surname");
Dt_Flow.Columns.Add("Address");
Dt_Flow.Columns.Add("City");
int my_number = 1;
for (int i = 0; i < 10; i++)
{
DataRow _newRow = Dt_Flow.NewRow();
_newRow["Number"] = my_number + ".";
_newRow["Surname"] = "Johnson";
_newRow["Address"] = "Beverly Hills";
_newRow["City"] = "Los Angeles";
Dt_Flow.Rows.Add(_newRow);
my_number++;
}
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
Почему это происходит, как я могу это исправить?
РЕДАКТИРОВАТЬ: Я добавил "Fill_table" метод в «My_ViewMmodel» , так что вы можете проверить все самостоятельно.