0

ComboBox コントロールのかなり興味深いケースがあります - CustomComboBox;

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

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

アイデア:

  • このコントロールを 1 つのページで複数回使用するには
  • masterpage コンテナで使用するには
  • masterpage コントロールには、それが存在する Page に関して異なる DataContexts が必要です

ロジック:

  • オーバーライドされた OnApplyTemplate で、グリッドを取得し、いくつかのイベントハンドラーを接続しています

問題:

  • masterpage コントロールが OnApplyTemplate を 1 回だけトリガーしている
  • CustomComboBox の最初の外観は予想どおりです。ただし、CustomComboBox のデータコンテキストを変更する場合でも、次のすべての外観は同じ DataContext です。これらの変更は、CustomGrid DataContext を変更するために到達しません

バインディングまたはプレゼンテーション ロジックに何か問題があると確信しています... 考えてみてください。ここでヒントをいただければ幸いです

ありがとう

4

1 に答える 1

1

OnApplyTemplateControlTemplateメソッド (親でも子でもない) をオーバーライドするコントロールに a が適用されたときに呼び出されます。が 1 回入力された場合OnApplyTemplate、オーバーライド コントロールも 1 回作成する必要があります。masterpage インスタンスが 1 つだけあるということです。これは予想外のことではありません。

Popups とについて言えば、 aからその外部へDataContextのバインディングで問題が発生することがよくあります。Popupしたがって、Popups に依存するのではなく、s に正しいコンテキストを提供するコード ビハインドを作成したいと思いBindingます。SL5 より前に DataContextChanged イベントが存在しないという問題があることは確かです。これを回避するには、 でカスタムを定義DependencyPropertyCustomComboBox、それを のコンテキストにバインドして、その値を のにCustomComboBox割り当てる必要があります。PopupPropertyChangedCallback

于 2011-12-21T15:50:45.613 に答える