2014-10-03 4 views
0

데이터 바인딩을 이해하려고 시도하고 있는데 이는 완전히 신참 오류처럼 보입니다. 그러나 왜 그런 일이 벌어지고 있는지 전혀 알 수 없습니다.바인딩 할 때 InitializeComponent가 StackOverflow 예외를 발생시킵니다.

CS

namespace MuhProgram 
{ 
    public partial class MainWindow : Window 
    { 
     public string foobar 
     { 
      get { return "loremipsum"; } 
     } 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

XAML :있는 StackOverflowException와 MainWindow() 방법 InitializeComponent() 전화에서

<Window x:Class="MuhProgram.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:MuhProgram" 
     Title="MainWindow" Height="350" Width="525"> 

    <Window.Resources> 
     <local:MainWindow x:Key="classMainWindow"/> 
    </Window.Resources> 

    <Grid> 
     <Label Content="{Binding Source={StaticResource classMainWindow}, Path=foobar}"></Label> 
    </Grid> 
</Window> 

디버거를 가리 킵니다.

DataContext 속성을 그리드에서 "{StaticResource classMainWindow}"으로 설정했지만 효과가 동일합니다. 재귀이 줄

<local:MainWindow x:Key="classMainWindow"/> 

에서 MainWindow를의 인스턴스를 생성하기 때문에

답변

2

StackOverflow의 예외의 InitializeComponent()가 호출되는 경우는 XAML을 초기화하고 컴파일 된 BAML에서로드됩니다 발생합니다. 그것을로드하는 동안 Label Content는 Content Content를 바인딩하기 위해 MainWindow의 다른 인스턴스를 필요로합니다. 따라서 SOW 예외와 충돌 할 때까지 MainWindow를 재귀 적으로 생성합니다.


MainWindow의 다른 인스턴스를 선언 할 필요가 없습니다. 이 같은 부모 인스턴스에 바인딩 레이블 :

<Label Content="{Binding Path=foobar, RelativeSource={RelativeSource FindAncestor, 
                  AncestorType=Window}}"/> 

또는

중 하나는 자체의 DataContext를 설정하고 라벨 부모 창에서 상속 할 수 있습니다.

<Window DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
    .... 
    <Label Content="{Binding foobar}"/> 

또는

설정 X는 : 창에 이름을 지정하고 ElementName을을 사용하여 바인딩.

<Window x:Name="myWindow"> 
    ..... 
    <Label Content="{Binding foobar, ElementName=myWindow}" /> 
+0

"MainWindow의 다른 인스턴스 선언"이란 무엇을 의미합니까? 내가 어디에서 그런거야? –

+1

다른 인스턴스 ''를 선언하고 있습니다. –

+0

왜 스택 오버플로가 발생합니까? 그 사람 [여기] (http://msdn.microsoft.com/en-us/library/ms752347(v=vs.110) .aspx)도 동일한 작업을 수행하고 있습니다 (첫 번째 XAML 코드 조각). –

관련 문제