如何使用PropertyChangedCallBack

时间:2011-03-31 10:36:42

标签: c# wpf static dependency-properties propertychanged

我有一个绑定到依赖属性的TextBox,我已经实现了一个PropertyChangedCallBack函数,当文本发生变化时我需要调用textbox.ScrollToEnd()但我不能因为PropertChanged函数需要是静态的,有没有办法解决此?

static FrameworkPropertyMetadata propertyMetaData = new FrameworkPropertyMetadata("MyWindow",
                                                                                      FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
                                                                                      new PropertyChangedCallback(TextProperty_PropertyChanged));

    public static readonly DependencyProperty TextProperty = DependencyProperty.Register("TextProperty", typeof(string), typeof(OutputPanel),
                                                                                         propertyMetaData);

    private void TextProperty_PropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        textbox.ScrollToEnd(); //An object reference is required for the non-static field.
    }

    public string Text
    {
        get 
        { 
            return this.GetValue(TextProperty) as string;
        }
        set 
        { 
            this.SetValue(TextProperty, value);
            //textbox.ScrollToEnd(); // I originally called it here but I think it should be in the property changed function. 
        }
    }

谢谢,

埃蒙

1 个答案:

答案 0 :(得分:24)

DependencyObject是引发事件的对象。您需要将obj强制转换为您需要的类型。例如。

TextBox textbox = (TextBox)obj;
textbox.ScrollToEnd();