WPF绑定到集合中的特定项目

时间:2009-11-11 14:24:05

标签: wpf binding

我目前正在尝试绑定到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;

现在我对我的收藏中的canvas cotainer进行了绑定。 PosClass是一个简单的类,有两个属性是'XPos'和'YPos'。

当我运行代码集时,我的椭圆正确绑定到数据源,这很好但是由于椭圆未设置为从集合中获取精确的行,因此它默认采用最后一行,因此将我的椭圆设置为0,0位置。

我想要做的是将椭圆设置为使用XAML中附加的集合中的第一个项目,或者如果我有更多项目,请说出第10个项目。我想再次在XAML中执行此操作,所以目前我只是绑定到X和Y位置,是否有某种语法允许我指定要使用的集合中的哪一行?

1 个答案:

答案 0 :(得分:6)

您可以使用括号指定要绑定的项目:

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

如果要绑定集合中的所有项目,则需要使用ItemsControl ItemTemplateItemsPanel

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