RichEditBox 双向合并不起作用 [Windows Store App]

RichEditBox two-way binbing does not work [Windows Store App]

我有 RichEditBox 和 class with DependencyPropert:

public class RichTextC : DependencyObject
{
    public static string GetRichText(DependencyObject obj)
    {
        return (string)obj.GetValue(RichTextProperty);
    }

    public static void SetRichText(DependencyObject obj, string value)
    {
        obj.SetValue(RichTextProperty, value);
    }

    public static readonly DependencyProperty RichTextProperty =  DependencyProperty.Register("RichText", typeof(string), typeof(RichTextC), new PropertyMetadata(string.Empty, callback));

    private static void callback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var reb = (RichEditBox)d;
        reb.Document.SetText(TextSetOptions.FormatRtf, (string)e.NewValue);
    }
 }

这是我在 XAML 文件中的 RichEditBox:

<RichEditBox local:RichTextC.RichText="{Binding MyRichText, Mode=TwoWay}"/>

问题是,View 可以由 View Model 通知,但是当我在 RichEditBox 中更改文本时,它不会通知 View Model。我的意思是,绑定仅以一种方式工作,从视图模型到视图,但从视图到视图模型不起作用。

如何将其更改为双向绑定才能开始工作?

当 RichEditBox 的文档文本发生变化时,您需要连接代码来设置 RichText 属性。为此,处理 RichEditBox.TextChanged 事件以更新 RichText 属性。您需要包含一些代码来防止 RichText 属性 在处理 TextChanged 事件时更新 RichEditBox 的文档文本(反之亦然)以防止循环。

因为我不能评论,所以我必须重写我的答案! :-(

  1. 创建一个 class 并将其命名为 RichEditBoxExtended
  2. WinRt: Binding a RTF String to a RichEditBox 中的代码替换 class 代码(请重新复制我更改了 class 的可见性)
  3. 转到您的 XAML 并输入: <local:RichTextBoxExtended RtfText="{Binding MyRichText, Mode=TwoWay}"/>

希望对您有所帮助...