我创建了一个扩展 RichTextBox 的自定义控件,以便可以为 xaml 属性创建绑定。只要我只是从视图模型更新属性,这一切都很好,但是当我尝试在richtextbox中编辑时,属性不会更新回来。
我在富文本框的扩展版本中有以下代码。
public static readonly DependencyProperty TextProperty = DependencyProperty.Register ("Text", typeof(string), typeof(BindableRichTextBox), new PropertyMetadata(OnTextPropertyChanged));
private static void OnTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var rtb = d as BindableRichTextBox;
if (rtb == null)
return;
string xaml = null;
if (e.NewValue != null)
{
xaml = e.NewValue as string;
if (xaml == null)
return;
}
rtb.Xaml = xaml ?? string.Empty;
}
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
在视图中,我已经设置了这样的绑定
<Controls:BindableRichTextBox Text="{Binding XamlText, Mode=TwoWay}"/>
在视图模型中,我将 XamlText 创建为普通属性,并在更新时调用 NotifyPropertyChanged 事件。
我希望当用户在丢失焦点上或直接在编辑期间在 RichTextBox 中输入文本时更新绑定的 XamlText,这并不重要。
如何更改代码以实现此目的?