2014-04-25 4 views
1

내 시나리오의 일부 코드 단편입니다. .xaml쪽에 ItemsControl이 있습니다.바인딩은 ElementName을 사용하는 경우에만 작동합니다. 이유가 무엇입니까?

<ItemsControl ItemsSource="{Binding StatList}" ItemTemplate="{StaticResource statBox}"></ItemsControl> 

StatList는 단순히 개체 목록입니다.

이 DataTemplate을이 TextBlock의

    <TextBlock x:Name="DataTextBlock" Background="Transparent" DockPanel.Dock="Top" HorizontalAlignment="Center" 
         Foreground="White" FontSize="11"> 
        <i:Interaction.Triggers> 
         <i:EventTrigger EventName="Loaded"> 
          <iBehaviors:InvokeMethodTrigger Method="UpdateBinding" 
            Target="{Binding DataContext, RelativeSource={RelativeSource TemplatedParent}}" 
            Parameter="{Binding ., RelativeSource={RelativeSource AncestorType=TextBlock}}" /> 
         </i:EventTrigger> 
        </i:Interaction.Triggers> 
       </TextBlock> 

이가 내 ViewModel에 내 StatList을 설정 처음 작동을 포함, TextBlock이 자체가 InvokeMethodTrigger에 매개 변수로 전달됩니다. 그러나 내 ViewModel에서 StatList를 변경하면 다음에 Loaded 이벤트가 발생할 때 InvokeMethodTrigger가 트리거 될 때 매개 변수가 null입니다. 이상하게도

, 나는 매개 변수가 바인딩 변경 :

Parameter="{Binding ElementName=DataTextBlock}" 

그것이 내가 TextBlock에이 매개 변수로 전달되면서, 내 StatList을 변경하려면 두 번째 시간을 작동합니다. 나는 내 인생을 위해 이유를 이해할 수 없다! 설명이 있습니까?

답변

-1

당신은 뒤에 코드에서 이런 식으로 작업을 수행 할 수 있습니다

SlatList slat = new SlatList(); 
    ItemControl.ItemSource = slat; 
    ItemControl.DataContext = slat; 

가 itemcontrol의 이름을 지정하고 이름을 "ItemControl"를 교체해야합니다. XAML에서

:

<ItemsControl ItemsSource="{Binding StatList}" DataContext="{Binding SlatList} ItemTemplate="{StaticResource statBox}"> </ItemsControl> 
관련 문제