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

Iff*_*ffy 5 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>       
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位置,是否有某种语法让我也可以指定要使用的集合中的哪一行?

Tho*_*que 7

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

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

  • 我有一个类似的问题,但是我需要绑定到特定属性具有特定值的项目。因此,在此示例中,假设PosClass具有一个称为PosID的属性。我想在PosID = 15的地方绑定。有什么想法吗? (2认同)