DataContextChangedに問題があり、カスタムPanelコントロールの論理的な子で発生していません。私はこれにそれを絞り込むました:WPF:論理子でDataContextChangedが発生しないのはなぜですか?
は、私が追加ウィザードで生成されたWPFアプリケーション最低料金:私は理解したよう
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var elt = new FrameworkElement();
this.AddLogicalChild(elt);
DataContext = 42;
Debug.Assert((int)elt.DataContext == 42);
}
、のDataContextがinheritable dependency propertyあるので、これは動作します。
今、私はウィンドウ(本)とその論理的な子のDataContextChanged両方のイベントハンドラを追加します。
this.DataContextChanged +=
delegate { Debug.WriteLine("this:DataContextChanged"); };
elt.DataContextChanged +=
delegate { Debug.WriteLine("elt:DataContextChanged"); };
私はこれを実行すると、のみ最初のイベントハンドラが実行されます。 これはなぜですか?そうではなくAddLogicalChild指定の(ELT)私は、次の手順を実行します
this.Content = elt;
両方のハンドラが実行されます。しかし、これは私の場合の選択肢ではありません - 私は視覚的な子供であるはずではない私のコントロールにFrameworkContentElementsを追加しています。
ここでは何が起こっていますか? AddLogicalChild()のほかに何かをして、動作させるべきでしょうか?
(幸いなことに、むしろ簡単な回避策がある - ちょうど窓ののDataContextに要素のDataContextのバインド)
BindingOperations.SetBinding(elt, FrameworkElement.DataContextProperty,
new Binding("DataContext") { Source = this });
ありがとうございました。あなたもLogicalChildren
プロパティをオーバーライドする必要が
はい、それです!ありがとう、ケント! –