2009-11-11 21 views
5

Obecnie próbuję powiązać pewne elementy w kolekcji wpf. Najlepiej wyjaśnić to przykładem.WPF Wiązanie do określonych elementów w kolekcji

Mój XAML jest poniżej:

<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>  

Teraz jak widać jestem tylko wiązania się z właściwościami Jako prosty przykład elipsy, aby umieścić go na osi X i Y od mojego źródła danych.

Mam kod C# w przypadku window_load do wiązania moje źródło danych do mojego elipsy, jak pokazano poniżej:

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; 

Teraz zrobiłem wiązania do cotainer płótnie z mojej kolekcji. PosClass to prosta klasa z dwiema właściwościami: XPos i YPos.

Po uruchomieniu zestawu kodu moja elipsa jest poprawnie powiązana ze źródłem danych, które jest świetne, ale ponieważ elipsa nie jest ustawiona na pobranie dokładnego wiersza z kolekcji, domyślnie przyjmuje ostatni wiersz, więc ustawienie elipsy na 0, Pozycja 0.

Co mogę zrobić, to ustawić elipsę, aby użyć pierwszego elementu w kolekcji dołączonej w XAML lub gdybym miał więcej przedmiotów, powiedzmy 10 pozycję. Znowu chcę to zrobić w XAML, więc obecnie mam po prostu powiązanie z pozycjami X i Y, czy jest jakaś składnia, która pozwala mi również określić, który wiersz w kolekcji ma być użyty?

Odpowiedz

6

Można określić, który element chcesz wiązać się z zastosowaniem wsporników:

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

Jeśli chcesz powiązać wszystkie elementy w kolekcji, trzeba użyć ItemsControl z ItemTemplate i ItemsPanel:

<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

Mam podobny problem, ale muszę związać element, którego konkretna właściwość ma określoną wartość. W tym przykładzie wyobraź sobie, że PosClass ma właściwość o nazwie PosID. Chcę związać gdzie POSID = 15. Jakieś pomysły? –