我知道这可能听起来很疯狂,但为了我的理解,您如何解释Window.DataContext
到MainWindow
的设置会导致此错误:
“抛出类型'System.StackOverflowException'的异常。”
<Window>
<Window.DataContext>
<local:MainWindow />
</Window.DataContext>
</Window>
答案 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
设置为窗口的当前实例,而不是新窗口。