2009-11-11 3 views
5

현재 wpf의 컬렉션에있는 특정 항목에 바인딩하려고합니다. 이는 예제로 가장 잘 설명됩니다.WPF 컬렉션의 특정 항목에 바인딩

내 XAML은 다음과 같습니다 :

<Canvas Name="TaskCanvas" Width="467.667" Height="414"> 
    <Ellipse Name="myElipse" Fill="White" Stroke="Black" Width="126" Height="76" 
      Canvas.Left="{Binding Path=XPos}" Canvas.Top="{Binding Path=YPos}" /> 
</Canvas>  

을 이제 난 그냥 내 데이터 소스에서 x와 y 축에 위치하는 타원의 간단한 예로서 속성에 바인딩하고 볼 수 있습니다.

PosClass posclass = new PosClass(); 
List<PosClass> posClasses = new List<PosClass>(); 

posclass.YPos = 100; 
posclass.XPos= 100;    
posClasses.Add(posclass); 

posclass.YPos = 0; 
posclass.XPos = 0; 
posClasses.Add(posclass); 

TaskCanvas.DataContext = posClasses; 

지금 나는 내 컬렉션에서 캔버스 cotainer에 결합했다 : 아래 그림과 같이

나는 나의 타원에 내 데이터 소스를 바인딩 할 window_load 이벤트에서 C# 코드가 있습니다. PosClass는 'XPos'와 'YPos'라는 두 가지 속성을 가진 간단한 클래스입니다.

코드 집합을 실행할 때 내 타원이 올바르게있는 데이터 소스에 올바르게 바인딩되어 있지만 타원이 컬렉션의 정확한 행을 가져 오도록 설정되지 않았으므로 기본적으로 마지막 행에서 내 타원을 0으로 설정하므로, 0 위치.

내가 할 수있게하려면 XAML에 첨부 된 컬렉션의 첫 번째 항목을 사용하도록 타원을 설정하거나 더 많은 항목이 있으면 10 번째 항목을 말할 수 있습니다. 다시 XAML에서 이렇게하고 싶습니다. 그래서 현재 X와 Y 위치에 대한 바인딩이 있습니다. 사용할 컬렉션의 행을 지정할 수있는 일종의 구문이 있습니까? 당신은 당신이 사용하는 브라켓에 결합 할 항목을 지정할 수 있습니다

답변

6

:

:

<Ellipse Name="myElipse" Fill="White" Stroke="Black" Width="126" Height="76" Canvas.Left="{Binding Path=[10].XPos}" Canvas.Top="{Binding Path=[10].YPos}"/> 

당신이 컬렉션의 모든 항목을 결합 할 경우, 당신은 ItemTemplateItemsPanel와 함께 ItemsControl를 사용해야합니다

<ItemsControl> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <Ellipse Name="myElipse" Fill="White" Stroke="Black" Width="126" Height="76" Canvas.Left="{Binding Path=XPos}" Canvas.Top="{Binding Path=YPos}"/> 
    </ItemsControl.ItemTemplate> 
</ItemsContol> 
+1

비슷한 문제가 있지만 특정 속성에 특정 값이있는 항목에 바인딩해야합니다. 그래서이 예제에서 PosClass가 PosID라는 속성을 가지고 있다고 상상해보십시오. 나는 PosID = 15에 바인딩하고 싶다. 어떤 아이디어? –

관련 문제