web-dev-qa-db-ja.com

PropertyChangedCallBackの使用方法

依存関係プロパティにバインドされた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. 
        }
    }

ありがとう、

エーモン

19
Eamonn McEvoy

DependencyObjectは、イベントを発生させたオブジェクトです。 objを必要なタイプにキャストする必要があります。例えば。

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