如何使用PropertyChangedCallBack

Eam*_*voy 19 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. 
        }
    }
Run Code Online (Sandbox Code Playgroud)

谢谢,

埃蒙·

Eug*_*ene 24

这DependencyObject是引发事件的对象.你需要转换obj为你需要的类型.例如

TextBox textbox = (TextBox)obj;
textbox.ScrollToEnd();
Run Code Online (Sandbox Code Playgroud)