【问题标题】:Save RichTextBox's content to file using MVVM使用 MVVM 将 RichTextBox 的内容保存到文件
【发布时间】:2013-05-29 17:31:55
【问题描述】:

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

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 中的Name 属性,它将无法工作。

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

【问题讨论】:

  • 您可以像这样将 RichTextBox 作为 CommandParameter 传递:CommandParameter={Binding ElementName=myRichTextBox}
  • 您能否详细解释一下如何在 ViewModel 中获取 name 属性? RichTextBox 刚刚在 View 中创建?

标签: c# wpf mvvm


【解决方案1】:

视图模型不需要 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    相关资源
    最近更新 更多