主窗口DataContext StackOverflowException

时间:2017-08-15 18:16:34

标签: c# wpf xaml

我知道这可能听起来很疯狂,但为了我的理解,您如何解释Window.DataContextMainWindow的设置会导致此错误:

  

“抛出类型'System.StackOverflowException'的异常。”

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

1 个答案:

答案 0 :(得分:2)

初始化窗口时,XAML会膨胀到真实对象。这些真实对象的构造函数被调用,初始化它们。

这一行实际上创建了MainWindow new 实例,而不是返回现有实例:

<local:MainWindow />

因此,您的XAML会创建一个新窗口,将DataContext设置为一个新窗口,将其DataContext设置为一个新窗口,将其DataContext设置为一个新窗口,将DataContext设置为一个新窗口,将其DataContext设置为一个新窗口,将其DataContext设置为一个新窗口,将其DataContext设置为新窗口窗口,将DataContext设置为一个新窗口,将其DataContext设置为一个新窗口,将其DataContext设置为一个新窗口,将其DataContext设置为一个新窗口,它将DataContext设置为一个新窗口,

等等,直到整个事情崩溃并烧毁。

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

DataContext设置为窗口的当前实例,而不是新窗口。