XAML

2012-11-25 9 views
0

에 부모를 얻기 나는 다음과 같은 한 XAML 코드 : 또한 XAML

<maps:Map Name="PlaygroundMap" Credentials="YOUR_BING_MAPS_KEY"> 
    <maps:MapItemsControl 
      x:Name="PlaygroundMapItems" 
      my:MapExt.ClusteredItemsSource="{Binding Locations}" 
      ItemTemplate="{StaticResource PinTemplate}"/> 
</maps:Map> 

ClusteredItemsSource은 (단지 중요한 부분이 표시됩니다) 다음 코드를 사용하여 내 자신의 연결된 속성입니다 :

private static void OnItemsReceived(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      var mapItemsControl = d as MapItemsControl; 

      if(mapItemsControl == null) return; 

      var map = VisualTreeHelper.GetParent(mapItemsControl); // this is always NULL 
      var map2 = mapItemsControl.Parent; // this is always NULL 

      var items = e.NewValue as IEnumerable<Location>; 
      mapItemsControl.ItemsSource = items; 
     } 

그래서 내 요구 사항은 OnItemsReceived 메서드에서 MAP 참조를 갖는 것입니다. XAML을 다시 확인하면 mapItemsControl이 Map의 자식인지 (또는지도가 mapItemsControl의 부모인지) 알 수 있기 때문에 쉽게 생각할 수 있습니다.

하지만 어쨌든 변수 맵 & map2는 항상 NULL입니다. 이것은 정상적인 행동입니까?

또한이 "상위"접근 방식이 작동하지 않는 경우 MapItemsControl의지도 참조를 가져 오는 다른 옵션이 무엇인지 제안 해주세요. 정확하게 내 맞춤 첨부 속성에서지도 참조를 얻으려고합니다.

Btw, WinRT 용 Bing Maps SDK를 사용 중입니다.

답변

1

VisualTreeHelper는 컨트롤이 시각적 트리의 일부가 아닌 경우 (아직로드되지 않은 이벤트가 발생하지 않았거나 표준 부모/자식 컨트롤을 사용하지 않았기 때문에) 자식 컨트롤 관계 트리거 (논리적으로 Panel, ContentControl 등의 하위 요소에 의해 하나씩)

여기서 가장 좋은 방법은 시각적 트리를 잊어 버리고 대신 바인딩 및보기 모델을 사용하는 것입니다.

+0

감사합니다. 마지막 문장은 내가 마지막으로 한 일이다. :) – rjovic