如何使用相同的依赖属性设置和获取数据?

时间:2012-07-01 00:20:46

标签: c# wpf xaml data-binding dependency-properties

我正在开发一个WPF项目。我刚刚创建了一个依赖属性。此依赖项属性旨在使RichTextBox.Selection.Text属性 bindeable

但我不能做的是使用相同的DP获取并将数据设置为RichTextBox.Selection.Text

如果我希望使用绑定从RichTextBox.Selection.Text获取数据,则使用此代码:

public class MyRichTextBox: RichTextBox
{

   public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
            "Text",
            typeof(string),
            typeof(MyRichTextBox),
            new PropertyMetadata(
                TextPropertyCallback));

    public string Text
    {
        get { return (string)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }

    public MyRichTextBox()
    {         
        this.TextChanged += new TextChangedEventHandler(MyRichTextBox_TextChanged);
    }

    void MyRichTextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        Text = this.Selection.Text;
    }

它完美无缺,但是使用此代码我无法从ViewModel类发送任何数据。

因此,如果我 ONLY 想要从我的ViewModel将数据设置为RichTextBox.Selection.Text属性,我使用了以下代码:

public class MyRichTextBox: RichTextBox
{
    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
        "Text",
        typeof(string),
        typeof(MyRichTextBox),
        new PropertyMetadata(
            TextPropertyCallback));

    public string Text
    {
        get { return (string)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }

    private static void TextPropertyCallback(DependencyObject controlInstance, DependencyPropertyChangedEventArgs args)
    {
        MyRichTextBox instance = (MyRichTextBox)controlInstance;
        instance.Selection.Text = (String)args.NewValue;
    }

所以,如果我希望能够使用相同的依赖属性来获取和设置数据,我该怎么办?

希望有人可以帮助我,提前告诉你

1 个答案:

答案 0 :(得分:1)

您没有将输入控件的文本绑定到VM的属性,而是将附加属性绑定到它,并且在附加属性的值中更改了您设置输入控件的文本。

换句话说 - 没有任何东西可以监视输入控件文本的更改。

编辑:

你还在做:

instance.Selection.Text = (String)args.NewValue;

但是,instance.Selection.Text没有变更通知。