2014-04-29 2 views
0

내 응용 프로그램에는 각 지점에 아이콘이있는 점 집합이있는 선이 있습니다. 나는 캔버스 요소 내에 다음 XAML을 가지고바인딩 된 ObservableCollection에 항목을 추가 할 때 WPF 폴리 라인의 변환기가 호출되지 않습니다.

<!-- A route line --> 
<Polyline Canvas.ZIndex="1" Stroke="Green" StrokeThickness="5" Points="{Binding SelectedRoute.Items, Converter={StaticResource routePointsConverter}}"></Polyline> 

<!-- The icons on a route line --> 
<ItemsControl Canvas.ZIndex="2" ItemsSource="{Binding SelectedRoute.Items}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="Canvas.Left" Value="{Binding X, Converter={StaticResource canvasIconCenterConverter}}"/> 
      <Setter Property="Canvas.Top" Value="{Binding Y, Converter={StaticResource canvasIconCenterConverter}}"/> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Image Source="Graphics\Icons\x.png" Width="20" Height="20"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

SelectedRoute.Items는 ObservableCollection에 있습니다. 문제는 폴리 라인이 업데이트되지 않고 아이템이 SelectedRoute.Items에 추가된다는 것입니다. 항목이 항목에 추가되면 아이콘이 추가됩니다. SelectedRoute의 바운드 Items를 다른 것으로 변경 한 다음 다시 바꿀 경우 선도 정확하게 그려집니다. 이 문제는 특히 Polyline 문제입니다.

디버깅 할 때 항목 추가시 Polyline의 변환기가 호출되지 않음을 알 수 있습니다. 왜 이런 일이 일어나는 걸까요?

참고로 해결 방법을 찾았지만 표시된 솔루션에서 작동하지 않는 이유를 알고 싶습니다.

답변

0

INotifyCollectionChanged WPF는 ItemsControl.ItemsSource 속성에 대해서만 업데이트합니다. 실제로는 Binding 확장자와 아무 관련이 없습니다. ItemsSource 속성을 INotifyCollectionChanged을 구현하는 컬렉션에 직접 할당 (예 : Binding 제외) 할 수 있으며 항목 컨트롤에 해당 컬렉션에 대한 변경 사항이 통지됩니다.

Points 바인딩을 업데이트하려면 Items 속성이 PropertyChanged 이벤트를 발생시켜야합니다. 컬렉션을 변경할 때마다 "수동으로"실행할 수 있습니다.