我目前正在尝试绑定到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位置,是否有某种语法允许我指定要使用的集合中的哪一行?
答案 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
ItemTemplate
和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>