【问题标题】:WPF Binding to specific items in collectionWPF 绑定到集合中的特定项目
【发布时间】:2009-11-11 14:24:05
【问题描述】:

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

【问题讨论】:

    标签: wpf binding


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我也有类似的问题,但是我需要绑定一个特定属性有一定值的项目。所以在这个例子中,假设 PosClass 有一个名为 PosID 的属性。我想绑定 PosID = 15 的位置。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2010-09-17
    相关资源
    最近更新 更多