gpt4 book ai didi

c# - 使用 MVVM 将 RichTextBox 的内容保存到文件

转载 作者:行者123 更新时间:2023-11-30 20:57:28 28 4
gpt4 key购买 nike

我对 RichTextBox 有疑问,我想将文档的内容保存在文本文件中。为此,我使用下一个代码:

XAML

<RichTextBox Grid.Row="0" x:Name="myRichTextBox" AcceptsTab="True" Margin="20">
<FlowDocument>
<Paragraph>
<Run>Some Paragraph</Run>
</Paragraph>
</FlowDocument>
</RichTextBox>

代码

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"属性。我想绑定(bind)一个 ICommand 来调用 SaveToTextFile() 方法,但是如果没有 RichTextBox 的 Name 属性,它就无法工作。

有没有办法用 MVVM 做到这一点?谢谢!

最佳答案

viewmodel 不需要 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>

关于c# - 使用 MVVM 将 RichTextBox 的内容保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16820382/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com