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 的文档文本(反之亦然)以防止循环。
因为我不能评论,所以我必须重写我的答案! :-(
- 创建一个 class 并将其命名为 RichEditBoxExtended
- 用 WinRt: Binding a RTF String to a RichEditBox 中的代码替换 class 代码(请重新复制我更改了 class 的可见性)
- 转到您的 XAML 并输入:
<local:RichTextBoxExtended RtfText="{Binding MyRichText, Mode=TwoWay}"/>
希望对您有所帮助...
我有 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 的文档文本(反之亦然)以防止循环。
因为我不能评论,所以我必须重写我的答案! :-(
- 创建一个 class 并将其命名为 RichEditBoxExtended
- 用 WinRt: Binding a RTF String to a RichEditBox 中的代码替换 class 代码(请重新复制我更改了 class 的可见性)
- 转到您的 XAML 并输入:
<local:RichTextBoxExtended RtfText="{Binding MyRichText, Mode=TwoWay}"/>
希望对您有所帮助...