2011-12-20 14 views
0

ComboBoxコントロール - CustomComboBoxでは面白いケースがあります。SilverlightのTemplateBinding DataContext

このComboBoxのスタイルでは、PopupにはDataContextを要求するカスタムコントロールが1つ含まれています。

<ctrl:CustomGrid DataContext="{TemplateBinding DataContext}" GridName="{Binding Preferences.CurrentGridName}"/> 

アイデア:

  • マスターページのコントロールがページそれに関して異なるのdatacontextsを持っている必要がありますマスターページコンテナ
  • でそれを使用するには、このコントロールを一ページ
  • に数回使用しますはオンです

ロジック:

オーバーライドされたOnApplyTemplateで
  • は、私は、グリッドを取得し、接続してい少数のEventHandler

問題:マスターページのコントロールは、一度だけCustomComboBoxの最初の出現がある

  • OnApplyTemplateをトリガさ

    • 予想通り。 はしかし、すべての次のapearanceは、CustomComboBox のDataContextのを変更する場合でも、これらの変更は、私のCustomGridのDataContextを変更することが到達しない同じDataContextのである

    私はバインディングやプレゼンテーションロジックに何かがあることを確信しています悪い... はControlTemplateが(どちらもその親、また子供)メソッドをオーバーライド制御に適用した場合、私はここに

    おかげ

  • +0

    複数のコンボボックスをお手伝いするには、マークアップの詳細をご記入ください。マスターページ、ページ、コンボボックスはどう関係していますか?どのコントロールのテンプレートの部分を投稿しましたか?グリッドにアクセスするコードは何ですか? –

    答えて

    1

    OnApplyTemplateと呼ばれているのヒントをいただければ幸いです、上のいくつかの考えを投げてください。 OnApplyTemplateを1回入力した場合は、上書きするコントロールも一度作成する必要があります。つまり、という単一のマスターページインスタンスがあることを意味します。これは予想外であってはなりません。

    PopupDataContextについては、Popupのバインディングに問題があることがよくあります。ですから、Bindingに頼るのではなく、Popupに正しいコンテキストを提供するコードビハインドを書くことにします。 SL5より前のDataContextChangedイベントが存在しないという問題があります。この問題を回避するには、CustomComboBoxにカスタムDependencyPropertyを定義し、CustomComboBoxのコンテキストにバインドし、その値をPropertyChangedCallbackPopupに割り当てます。

    関連する問題