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}"/>
ビューモデルでは、更新時に NotifyPropertyChanged イベントが呼び出される通常のプロパティとして XamlText を作成しました。
ユーザーが失われたフォーカスまたは編集中に直接 RichTextBox にテキストを入力したときに、バインドされた XamlText を更新したいのですが、実際には問題ではありません。
これを実現するためにコードを変更するにはどうすればよいですか?