我目前正在尝试绑定到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>
Run Code Online (Sandbox Code Playgroud)
现在你可以看到我只是绑定到属性作为椭圆的一个简单示例,将它定位在我的数据源的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;
Run Code Online (Sandbox Code Playgroud)
现在我从我的收藏中对canvas cotainer进行了绑定.PosClass是一个简单的类,有两个属性是'XPos'和'YPos'.
当我运行的代码设置我的椭圆正确绑定到这是伟大的,但作为椭圆没有设置采取从集合默认情况下它的确切行占用的最后一排,所以我的椭圆设置为0,0位置的数据源.
我想要做的是设置椭圆以使用XAML中附加的集合中的第一个项目,或者如果我有更多的项目,请说出第10个项目.我想再次在XAML中这样做,所以目前我只是绑定到X和Y位置,是否有某种语法让我也可以指定要使用的集合中的哪一行?
您可以使用括号指定要绑定到的项目:
<Ellipse Name="myElipse" Fill="White" Stroke="Black" Width="126" Height="76" Canvas.Left="{Binding Path=[10].XPos}" Canvas.Top="{Binding Path=[10].YPos}"/>
Run Code Online (Sandbox Code Playgroud)
如果要绑定集合中的所有项,则需要使用ItemsControlwith 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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8162 次 |
| 最近记录: |