2017-08-15 54 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