1

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 を更新したいのですが、実際には問題ではありません。

これを実現するためにコードを変更するにはどうすればよいですか?

4

1 に答える 1