I have
- MainView
- MenuView
- ViewModel
- ContentView
MainView is Window, which include MenuView & ContentView as UserControl.
MenuView has a print button, which bind to ViewModel's print command.
ViewModel has a print command, which need RichTextBox's FlowDocument in order to print.
ContentView has a RichTextBox, which is needed to print.
I can bind MenuView and ViewModel. However, I can not get a ContentView's FlowDocument.
I try to set ContentView's DataContext to ViewModel's FlowDocument (which may be a violation of MVVM pattern), but it fails because RichTextBox's Document can not bind to ViewModel's FlowDocument.
Therefore, I need a help to design MVVM pattern for printing RichTextBox's FlowDocument.
Here is simplified sample code,
ViewModel.cs
class ViewModel
{
public ICommand PrintCommand;
//Fail binding to ContentView's RichTextBox
public FlowDocument FlowDocument;
public ViewModel
{
PrintCommand = new PrintCommand();
}
}
MenuView.xaml
<Button x:Name="ButtonPrint" Command="{Binding PrintCommand}"
CommandParameter="/* How to get ContentView's FlowDocument */" >
OR
MenuView.xaml.cs
private void ButtonPrint_Click(object sender, RoutedEventArgs e)
{
(this.DataContext as MainViewModel).PrintCommand.Execute(/* How to get ContentView's FlowDocument */);
}
ContentView.xaml
<RichTextBox>
<FlowDocument x:Name="FlowDocument">
<Paragraph>
<Run Text="RichTextBox"/>
</Paragraph>
</FlowDocument>
</RichTextBox>
PrintCommand.cs
class PrintCommand : ICommand
{
private FlowDocument flowDocument;
public PrintCommand(FlowDocument flowDocument)
{
this.flowDocument = flowDocument;
}
public void Execute(object parameter)
{
//Execute Print!
Console.Write("Print!");
}
}