RichEditBox双向绑定不起作用[Windows应用商店应用]

时间:2015-03-07 00:12:32

标签: c# data-binding binding windows-runtime windows-store-apps

我有RichEditBox和带有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,但是当我在RichEditBox中更改文本时,它不会通知View Model。我的意思是,绑定只能以一种方式工作,从View Model到View,但是从View到View Model不起作用。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

因为我无法发表评论,我必须重写我的答案! : - (

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