2009-11-11 14 views
5

Şu anda wpf dosyasında bir koleksiyona belirli öğeleri bağlamaya çalışıyorum. Bu en iyi bir örnekle açıklanabilir.WPF Koleksiyondaki belirli öğelere bağlanma

Benim XAML aşağıdaki gibidir:

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

Şimdi ben sadece benim veri kaynağından x ve y ekseni üzerinde konumlandırmak için elips basit bir örnek olarak özelliklerine bağlama am görebilirsiniz.

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; 

Şimdi bir Koleksiyonumdan tuval cotainer bağlanma yaptı: aşağıda gösterildiği gibi

benim elips benim veri kaynağı bağlamak için window_load olay C# kodu var. PosClass, 'XPos' ve 'YPos' olmak üzere iki özelliğe sahip basit bir sınıftır.

Kod setini çalıştırdığımda elipsim veri kaynağıyla doğru bir şekilde bağlanır ancak elipsin koleksiyondan tam bir satır alması için ayarlanmadığı için, varsayılan olarak son satırı alır ve böylece elipsimi 0 olarak ayarlar. 0 pozisyon

Yapmak istediğim şey, elipsin XAML'ye ekli koleksiyondaki ilk öğeyi kullanması için ayarlanmasıdır, yoksa daha fazla öğeye sahip olsaydım 10. maddeyi söyler. Yine de XAML'de bunu yapmak istiyorum, şu anda sadece X ve Y pozisyonlarına bağlanıyorum, koleksiyonda hangi satırın kullanılacağını belirtmeme izin veren bir tür sözdizimi var mı? Kullandığınız parantez bağlamak istediğiniz öğeyi belirtebilirsiniz

cevap

6

:

:

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

Eğer koleksiyonlarında tüm öğeleri bağlamak istiyorsanız, bir ItemTemplate ve ItemsPanel ile ItemsControl kullanmak gerekir

<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

Benzer bir sorunum var, ancak belirli bir özelliğin belirli bir değere sahip olduğu bir öğeye bağlanmam gerekiyor. Yani bu örnekte PosClass'ın PosID adında bir özelliği olduğunu hayal edin. PosID = 15'i bağlamak istiyorum. Herhangi bir fikir var mı? –

İlgili konular