在ItemsControl绑定到属性不起作用但绑定到DataContext

时间:2012-01-12 15:10:16

标签: silverlight binding datacontext itemscontrol

当我运行此代码时,CustomControl中的Item对象变为System.Windows.Data.Binding,其中只包含空值,但DataContext变为MyClass对象(其中填充了Items)

<UserControl x:Name="thisControl">

<Grid x:Name="LayoutRoot">
    <ItemsControl ItemsSource="{Binding ElementName=thisControl,Path=Items}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <local:UniformGrid Columns="1"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <local:CustomControl Item="{Binding}" DataContext="{Binding}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>
</UserControl>

我的CustomControl类

public partial class CustomControl : UserControl
{
    public CustomControl()
    {
        InitializeComponent();
    }

    public object Item { get; set; }
}

有什么我不知道的ItemsControl吗? 这是用Silverlight 4.0编写的

提前致谢!

1 个答案:

答案 0 :(得分:0)

您无需尝试分配自定义控件DataContext。 ItemsControl将为您处理。

此外,您的CustomControl代码需要将Item属性指定为DependencyProperty,以使绑定生效。绑定不适用于普通的普通属性。

示例:

    public object Item
    {
        get { return GetValue(ItemProperty); }
        set { SetValue(ItemProperty, value); }
    }

    public static readonly DependencyProperty ItemProperty =
        DependencyProperty.Register(
            "Item",
            typeof(object),
            typeof(CustomControl),
            new PropertyMetadata(null))

(我认为RSListBoxStopItem是一个拼写错误,你打算概括为CustomControl