WPF绑定到集合中的特定项

5

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

现在我已经将我的集合绑定到画布容器上。PosClass是一个简单的类,有两个属性:“XPos”和“YPos”。

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

我想要做的是设置椭圆使用XAML中附加的集合中的第一项,或者如果我有更多的项,比如第10项。同样,我想在XAML中完成这个操作,所以目前我只有绑定到X和Y位置,是否有某种语法可以让我指定使用集合中的哪一行?

1个回答

7

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

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

如果你想将集合中的所有项绑定在一起,你需要使用一个带有 ItemTemplateItemsPanelItemsControl
<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>

3
我有一个类似的问题,但我需要绑定到某个物品上,该物品具有特定值的某个属性。因此,在这个例子中,假设PosClass有一个名为PosID的属性。我想要绑定到PosID = 15的地方。有什么建议吗? - monibius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接