2014-12-28 2 views
0

바인딩 문제가 있습니다.WPF 바인딩 속성을 찾을 수 없습니다.

다음 줄 : Center = "{바인딩 위치, RelativeSource TemplatedParent}" 런타임에 문제가 발생합니다. 나는 위치에 대한 System.Windows.Point을 사용하고

public interface IRadarReader 
{ 
    BindingList<RadarEntity> Entities { get; } 
    RadarEntity LocalPlayer { get; } 
    bool Enabled { get; set; } 
} 

public class RadarEntity 
{ 
    public Point Position { get; set; } 
    public PlayerTeam Team { get; set; } 
    public EntityType Type { get; set; } 
} 

:

System.Windows.Data Error: 40 : BindingExpression path error: 'Position' property not found on 'object' ''ContentPresenter' (Name='')'. BindingExpression:Path=Position; DataItem='ContentPresenter' (Name=''); target element is 'EllipseGeometry' (HashCode=63639374); target property is 'Center' (type 'Point')

이 내 모델이다 : 그것은 나에게 오류를 제공합니다. 나는 사물의 나머지 부분을 볼 수 스눕 2.8.0에서

<Window.Resources> 
    <l:RadarTeamToColorConverter x:Key="RadarTeamToColorConverter"/> 
</Window.Resources> 

<Grid> 
    <GroupBox Header="Radar"> 
     <Viewbox> 
      <ItemsControl ItemsSource="{Binding GameReader.RadarReader.Entities}" Background="#FFA4D16E"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <Canvas Width="100" Height="100"/> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <Path Fill="{Binding Team, Converter={StaticResource RadarTeamToColorConverter}}"> 
          <Path.Data> 
           <EllipseGeometry x:Name="PlayerEllipse" 
            Center="{Binding Position, RelativeSource={RelativeSource TemplatedParent}}" 
            RadiusX="5" 
            RadiusY="5"/> 
          </Path.Data> 
         </Path> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </Viewbox> 
    </GroupBox> 
</Grid> 

가 제대로 바인더 제본된다. 값 변환기가 작동 중입니다. 스누프에서이 "위치"속성 만 빨간색으로 강조 표시됩니다.

어디서 오류가 있습니까?

답변

2

{TemplatedParent} 실 거예요 작품은 그 ContentPresenter로 해석하기 때문이다. 왜 그런지 관심이 있다면 Snoop을 사용하여 시각적 트리를 실제로 검사해야합니다.

그러나 @Hamlet 응답이 작동하지 않습니다. EllipseGeometry 요소는 DataContext을 상속하지 않습니다. EllipseGeometry 요소가 시각적 트리에 없습니다.

이 작업을 시도 할 수 있습니다 : 그것은 지금 나에게 그 오류를 제공하지 않습니다

Center="{Binding DataContext.Position, RelativeSource={RelativeSource TemplatedParent}}" 
+0

햄릿 anser 작품 종류. 이 오류가 발생하지 않고 캔버스 윤곽을 스눕 (snoop)으로 볼 수 있지만 줄임표가 표시되지 않습니다. – Hooch

+0

@Hooch :'Path'의'Stroke' 속성도 변경해야합니다. 나는 이것을 점검해야 할 것이다. 나는 시각적 인 나무 개념과 혼동된다. p, ps, 바인딩이 실제로'Position' 속성을 읽는가? getter에 중단 점을 넣습니다. 바인딩이 실제로 작동한다면 그것은 신뢰할 수있는 방법입니다. –

+0

변환기가있는 제 바인딩이 작동하지 않는 것을 발견했습니다. My Converter는 System.Media.Colors를 반환합니다. 제가 손으로 색을 칠한다면 그것은 작동합니다. – Hooch

1

유혹하는 부모에게 왜 바인딩합니까? 이것은 효과가있다. 오류에서 읽을

<Path.Data> 
    <EllipseGeometry x:Name="PlayerEllipse" 
       Center="{Binding Position}" 
       RadiusX="5" 
       RadiusY="5"/> 
</Path.Data> 
+0

. "가능한"수정으로 추가했습니다. 고마워 더 이상이 오류가 발생하지 않습니다. 그러나 어떤 이유로 인해 타원이 표시되지 않습니다. – Hooch

관련 문제