以编程方式绑定名称ItemsControl

时间:2015-06-29 09:20:20

标签: c# wpf binding itemscontrol

我以编程方式创建一个矩形网格,每个矩形内部都有一个Label。我使用Event Command检测了哪个矩形被点击了。我的问题是,如果我尝试绑定矩形名称,我会收到此错误: Uid或Name属性值不允许使用MarkupExtensions,因此“{Binding ID}”无效 所以我只有在点击标签时才能检索名称。有这个问题的解决方案吗? 我的XAML:

<ItemsControl ItemsSource="{Binding CaskList}" HorizontalAlignment="Left" VerticalAlignment="Top">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <Canvas Width="1680" Height="800">
                            <i:Interaction.Triggers>
                                <i:EventTrigger EventName="MouseLeftButtonDown" >
                                    <cmd:EventToCommand Command="{Binding SelCaskCommand}" PassEventArgsToCommand="True" />
                                </i:EventTrigger>
                            </i:Interaction.Triggers>
                        </Canvas>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemContainerStyle>
                    <Style TargetType="ContentPresenter">
                        <Setter Property="Canvas.Left" Value="{Binding Left}"/>
                        <Setter Property="Canvas.Top" Value="{Binding Top}"/>
                    </Style>
                </ItemsControl.ItemContainerStyle>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Rectangle Stroke="Black" Width="64" Height="64" Fill="{Binding Color}" ></Rectangle>
                            <Label Content="{Binding ID}" FontSize="14" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

我尝试使用

绑定rectanle
<Rectangle Stroke="Black" Width="64" Height="64" Fill="{Binding Color}" Name="{Binding ID}">

绑定到Itemscontrol的类是

public class Cask
{
    public string ID { get; set; }
    public Int64 Left { get; set; }
    public Int64 Top { get; set; }
    public SolidColorBrush Color { get; set; }
}

2 个答案:

答案 0 :(得分:2)

不建议对Name属性进行数据绑定。如果绑定name属性,则名称将变为动态。如果名称是动态的,那么您无法从代码隐藏中引用控件。因此你得到了错误&#34; Uid或Name属性值不允许使用MarkupExtensions,因此{Binding ID}&#39;无效&#34;。

如果你真的想绑定ID属性并在你的代码后面或View模型中使用它,那么你可以将它绑定到Tag属性。

答案 1 :(得分:0)

我使用Tag代替Name

解决了问题