2017-08-15 81 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到一個新的窗口,它設置其DataContext到一個新的窗口,它設置其DataContext到一個新的窗口,它設置其DataContext到一個新的窗口,它設置其DataContext到一個新的窗口,

等,直到整個事情崩潰和灼傷。

什麼你可能的意思做,是

<Window DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
</Window> 

這臺DataContext到當前實例的窗口的,而不是一個新的窗口。

+0

令人難以置信的智能!事實上,我試圖理解爲什麼在後臺代碼中的綁定不像在ViewModel中那樣工作,所以我來到這個實驗中。您的自綁定是實現該目的的方法。 – usefulBee