Silverlight 将ItemsControl中的数据绑定到自定义UserControl属性

Silverlight 将ItemsControl中的数据绑定到自定义UserControl属性,silverlight,data-binding,silverlight-4.0,dependency-properties,Silverlight,Data Binding,Silverlight 4.0,Dependency Properties,我在数据绑定方面遇到了重大问题 我的MainPage.xml中有一个带有ItemControl的stackpanel: <StackPanel> <ItemsControl x:Name="TopicList"> <ItemsControl.ItemTemplate> <DataT

我在数据绑定方面遇到了重大问题

我的MainPage.xml中有一个带有ItemControl的stackpanel:

                <StackPanel>
                    <ItemsControl x:Name="TopicList">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <local:TopicListItem Title="{Binding Title}"/>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </StackPanel>
在自定义控件TopicListItem中,我创建了一个
DependencyProperty
和相应的公共属性:

    #region Title (DependencyProperty)

    /// <summary> 
    /// Title
    /// </summary> 
    public String Title
    {
        get { return (String)GetValue(TitleProperty); }
        set { SetValue(TitleProperty, value); }
    }
    public static readonly DependencyProperty TitleProperty =
        DependencyProperty.Register("Title", typeof(String), typeof(TopicListItem),
        new PropertyMetadata(0, new PropertyChangedCallback(OnTitleChanged)));

    private static void OnTitleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ((TopicListItem)d).OnTitleChanged(e);
    }

    private void OnTitleChanged(DependencyPropertyChangedEventArgs e)
    {
        throw new NotImplementedException();
    }

    #endregion Title (DependencyProperty)
#地区名称(从属财产)
///  
///头衔
///  
公共字符串标题
{
获取{return(String)GetValue(TitleProperty);}
set{SetValue(TitleProperty,value);}
}
公共静态只读从属属性TitleProperty=
DependencyProperty.Register(“标题”)、typeof(字符串)、typeof(主题列表项),
新的PropertyMetadata(0,新的PropertyChangedCallback(OnTitleChanged));
私有静态void OnTitleChanged(DependencyObject d、DependencyPropertyChangedEventArgs e)
{
((主题列表项)d)OnTitleChanged(e);
}
私有void OnTitleChanged(DependencyPropertyChangedEventArgs e)
{
抛出新的NotImplementedException();
}
#endregion标题(从属财产)
当我运行此程序并尝试设置
ItemSource
时,Title属性出现错误:

    #region Title (DependencyProperty)

    /// <summary> 
    /// Title
    /// </summary> 
    public String Title
    {
        get { return (String)GetValue(TitleProperty); }
        set { SetValue(TitleProperty, value); }
    }
    public static readonly DependencyProperty TitleProperty =
        DependencyProperty.Register("Title", typeof(String), typeof(TopicListItem),
        new PropertyMetadata(0, new PropertyChangedCallback(OnTitleChanged)));

    private static void OnTitleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ((TopicListItem)d).OnTitleChanged(e);
    }

    private void OnTitleChanged(DependencyPropertyChangedEventArgs e)
    {
        throw new NotImplementedException();
    }

    #endregion Title (DependencyProperty)
System.TypeInitializationException:“NewsSync.TopicListItem”的类型初始值设定项引发异常。-->System.ArgumentException:默认值类型与类型不匹配 财产

--
附带说明:我尝试过不为Title属性声明depenncyproperty,而只是将其作为公共字符串。但随后我遇到了转换问题,它说我无法从
System.[…]转换。Binding
System.String


所以我真的尝试了很多东西。

这一点是你的问题:-

 public static readonly DependencyProperty TitleProperty =
    DependencyProperty.Register("Title", typeof(String), typeof(TopicListItem),
    new PropertyMetadata(0, new PropertyChangedCallback(OnTitleChanged)));
注意
PropertyMetadata
构造函数的第一个参数是dependency属性的默认值。您已将其注册为
typeof(String)
,但您正在使用
Int32
(0)作为初始值。改用
null
。您也可以使用:-

public static readonly DependencyProperty TitleProperty =
    DependencyProperty.Register("Title", typeof(String), typeof(TopicListItem), null);

因为当前将值分配给
标题时,您的代码将引发异常。如果在属性更改时确实有事情要做,则只需指定一个
PropertyChangedCallback

这是一个很难破解的问题,我意外地使用了一个类似的更改:
public static readonly dependencProperty TitleProperty=dependencProperty.Register(“Title”、typeof(String)、typeof(TopicListItem),新属性元数据(空)感谢您的澄清,我还没有意识到关于依赖项属性的默认值的那一部分。顺便说一下,这也是我一直在寻找的东西:D