2017-08-15 15 views
0

私はこれがクレイジーに聞こえるかもしれないけど、私の理解のために、どのようにあなたは、このエラーでWindow.DataContextMainWindowに結果設定することを説明するだろう:メインウィンドウのDataContext StackOverflowExceptionが

"Exception of type 'System.StackOverflowException' was thrown."

<Window> 
    <Window.DataContext> 
    <local:MainWindow /> 
    </Window.DataContext> 
</Window> 

答えて

2

をウィンドウがある場合には初期化されると、XAMLは実際のオブジェクトに展開されます。これらの実オブジェクトには、それらを初期化するコンストラクタが呼び出されます。

この行はなく、実際に既存のインスタンスを返すので、MainWindow新しいインスタンスを作成します。

<local:MainWindow /> 

だからあなたのXAMLは、そのを設定し、新しいウィンドウにDataContextを設定し、新しいウィンドウを、作成しますDataContextを新しいウィンドウに設定します。新しいウィンドウには、DataContextが新しいウィンドウに設定され、新しいウィンドウにはDataContextが設定されますこれは、新しいウィンドウにそのDataContextを設定新しいウィンドウにそのDataContextを設定新しいウィンドウにそのDataContextを設定新しいウィンドウにそのDataContextを設定し、新しいウィンドウ、、、、10、

など、全体が崩壊して燃えるまで。あなたは、このおそらく行うためのものである

現在インスタンスのウィンドウのではなく、新しいウィンドウにDataContextを設定
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
</Window> 

+0

信じられないほどスマート!実際、ViewModelのようにコードビンのバインディングがなぜ機能しないのか理解しようとしている間に、私はこの実験に着きました。あなた自身のバインディングがその目的のために行く方法です。 – usefulBee

関連する問題