Silverlight 将ItemsControl中的数据绑定到自定义UserControl属性
我在数据绑定方面遇到了重大问题 我的MainPage.xml中有一个带有ItemControl的stackpanel: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
<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