【问题标题】:RichEditBox two-way binbing does not work [Windows Store App]RichEditBox 双向装箱不起作用 [Windows Store App]
【发布时间】:2015-03-11 16:42:57
【问题描述】:

我有 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}"/>

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

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

【问题讨论】:

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


【解决方案1】:

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

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

我希望这会有所帮助...

【讨论】:

  • 我还有一些奇怪的问题;/。在我的项目中,我创建了文件夹 Controls。在 Controls 文件夹中,我使用您的代码创建了 RichEditBoxExtended 类。然后我 xaml 我添加了这个: xmlns:controls="using:StringSearcher.Controls" 和这个 i> 然后我得到错误,我的命名空间中不存在“RichEditBoxExtended”。我不明白为什么。
  • 在添加控件之前尝试编译(清理和重建)项目,或者您可能必须重新启动 Visual Studio...Visual Studio 中有一些奇怪的缓存行为...
  • 当然我尝试清理和重建应用程序,但它仍然无法正常工作。我不认为尝试重置 VS。根据您的建议,我尝试重置并解决了我的问题。谢谢你。 :)
  • 此代码有效,但如果绑定的 observablecollection 发生更改,则它不会反映在 RichEditBoxExtended 中。关于如何解决这个问题的任何线索?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多