2009-03-09 8 views
1

は、私はフィールドという名前のカスタムユーザーコントロールを持っています。Silverlightのカスタムユーザーコントロールと依存プロパティ問題

public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
     "Value", 
     typeof(string), 
     typeof(Field), 
     new PropertyMetadata(
      default(string), 
      (source, args) => (source as Field).TxtValue.Text = (string)args.NewValue 
     ) 
    ); 

    [Category("Custom")] 
    public string Value 
    { 
     get 
     { 
      return (string)this.GetValue(ValueProperty); 
     } 
     set 
     { 
      this.SetValue(ValueProperty, value); 
     } 
    } 

最初の質問です。これは、親ユーザーコントロールを介してバックアップして、xamlページから設定できるように、子ユーザーコントロールの依存プロパティを伝播する正しい方法ですか?私はネット上を見てきましたが、カスタムコントロールを書くときにこれがかなり基本的なことであると考えることはあまりありません。

大きな写真の周りに詳細を示すと、私は顧客の詳細ページを持ち、一部のコントロールは観察可能なコレクションに含まれる顧客オブジェクトにバインドされています。ページ上の(フィールドコントロールに含まれている)テキストボックスの値を "xxxx"から "yyyy"に変更すると、常に "xxxx"に戻ります。何かがゲッターのどこかで間違っているようですね?

答えて

1

これは間違いなく、プロパティを伝播させるための正しい手順です。

実際のカスタムコントロール(Controlから派生したもの)の場合は、{TemplateBinding Value}を使用し、さらに、OnApplyTemplateメソッドでテンプレート部分を設定した後、TextBoxのTextChangedイベントにも接続する必要があります。そうすれば、基底のTxtValue依存関係プロパティも更新することができます。

これがUserControlの場合は、Bindingを使用することができますが、いくつかのオプションはありません。あなたはそれを持っているので、あなたのプロパティ変更コールバック関数は一方向に行くだけです:テキスト値を設定するだけで、あなたはそれに反応しません。

そこのドキュメントが改善されることを願っています。

関連する問題