使用MVVM保存RichTextBox's的内容到文件
本文关键字:文件 保存 MVVM RichTextBox 使用 | 更新日期: 2023-09-27 18:16:00
我有一个RichTextBox
的问题,我想把文档的内容保存在一个文本文件中。为此,我使用下一个代码:
XAML
<RichTextBox Grid.Row="0" x:Name="myRichTextBox" AcceptsTab="True" Margin="20">
<FlowDocument>
<Paragraph>
<Run>Some Paragraph</Run>
</Paragraph>
</FlowDocument>
</RichTextBox>
Code
private void btnSaveToTxt_Click(object sender, RoutedEventArgs e)
{
string fileName = @"D:'testRichTextBox1Text.txt";
SaveToTextFile(fileName);
MessageBox.Show("Text File Saved");
}
public void SaveToTextFile(string fileName)
{
TextRange range;
FileStream fileStream;
range = new TextRange(myRichTextBox.Document.ContentStart,
myRichTextBox.Document.ContentEnd);
fileStream = new FileStream(fileName, FileMode.Create);
range.Save(fileStream, DataFormats.Text);
fileStream.Close();
}
这段代码是好的,它的工作原理,但我将如何做到这一点与MVVM
。对于这种方法,我需要RichTextBox的x:Name="myRichTextBox"属性。我想绑定一个ICommand
调用SaveToTextFile()
方法,但没有名称属性从RichTextBox它不会工作。
是否有办法做到这一点与MVVM ?谢谢!
视图模型不需要Name属性。为了保存文档,它只需要FlowDocument对象。因此,创建一个保存操作的命令,并通过CommandParameter传递FlowDocument实例。
public class ViewModel
{
string fileName = @"D:'testRichTextBox1Text.txt";
private ICommand saveCommand;
public ICommand SaveCommand
{
get
{
if (saveCommand == null)
{
saveCommand = new DelegateCommand(SaveToTextFile);
}
return saveCommand;
}
}
public void SaveToTextFile(object document)
{
TextRange range;
FileStream fileStream;
range = new TextRange(((FlowDocument)document).ContentStart,
((FlowDocument)document).ContentEnd);
fileStream = new FileStream(fileName, FileMode.Create);
range.Save(fileStream, DataFormats.Text);
fileStream.Close();
MessageBox.Show("Text File Saved");
}
}
XAML如下图所示,
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition />
</Grid.RowDefinitions>
<Button Content="Save" Margin="20 10" Command="{Binding SaveCommand}" CommandParameter="{Binding ElementName=myRichTextBox, Path=Document}"/>
<RichTextBox Grid.Row="1" x:Name="myRichTextBox" AcceptsTab="True" Margin="20">
<FlowDocument>
<Paragraph>
<Run>Some Paragraph</Run>
</Paragraph>
</FlowDocument>
</RichTextBox>
</Grid>