2009-11-11 98 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軸。

我在window_load事件到我的數據源綁定到我的橢圓形的C#代碼如下所示:

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。 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}"/> 

如果你要綁定在集合中的所有項目,你需要使用一個ItemsControlItemTemplateItemsPanel

<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的任何想法? – 2009-11-11 14:37:04