1

これが私の問題です。最近、カスタムコントロールを作成しました。これは非常にうまく機能します。しかし、私はそれを使用するときに問題があります、私は少し問題があります:

私のコントロールでは、次のように定義されたValueという名前のプロパティを作成しました。

 public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(int), typeof(NumericUpDown), new PropertyMetadata(1000));
    public int Value
    {
        get
        {
            return (int)GetValue(ValueProperty);
        }
        set
        {
            SetValue(ValueProperty, value);
            this.ValueText.Text = value.ToString();
        }
    }

この値にデータバインディングを実行すると、バインディングは機能しますが、デフォルト値は1000に設定されているため、最初に1000が出力されます。ただし、実際には、Valueにバインドされたプロパティは1000に等しくありませんValueText.Text。 Valueプロパティが作成されたときのバインドされたプロパティの値。

編集:質問は簡単ですが、そのデフォルト値を削除して、バインドされたプロパティを直接出力するにはどうすればよいですか?

4

2 に答える 2

2

PropertyChangedDependancyPropertiesメタデータにイベントを設定して、変更ValueText時に更新できるようにする必要がありますValue

このような何か:

public static readonly DependencyProperty ValueProperty =
    DependencyProperty.Register("Value", typeof(int), typeof(NumericUpDown),
    new PropertyMetadata(1000, (sender, e) => (sender as NumericUpDown).ValueText.Text = e.NewValue.ToString()));

public int Value
{
    get { return (int)GetValue(ValueProperty); }
    set { SetValue(ValueProperty, value); }
}
于 2013-01-02T20:26:28.157 に答える
0

プロパティセッターは、WPFのデータバインディングを介して変更されたときに呼び出されないため、この手法は機能しません。

デフォルトの初期値は常に1000ですが、データバインディングによってオーバーライドされる場合があります。依存関係プロパティの値が変更されたときに適切に通知するには、コールバックを追加する必要があります。

詳細については、「依存関係プロパティのコールバック」ページを参照して、プロパティ変更コールバックを正しく実装する方法を確認してください。ValueTextこれは、他の( )プロパティを設定するのに適した場所です。

于 2013-01-02T20:06:51.637 に答える