我创建了一个自定义的silverlight控件,它由两个日期选择器和一个组合框组成。我想使组合框数据可绑定,我知道我需要使用DependencyProperty。我不确定的是如何构建它。这是我的代码:
#region ItemsSource (DependencyProperty)
/// <summary>
/// ItemsSource to bind to the ComboBox
/// </summary>
public IList ItemsSource
{
get { return (IList)GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
public static readonly DependencyProperty ItemsSourceProperty =
DependencyProperty.Register("ItemsSource", typeof(int), typeof(DateRangeControl),
new PropertyMetadata(0));
#endregion
问题是我见过的所有样本都是针对简单的属性,如Text或Background,它们可能是字符串,整数或颜色。由于我试图绑定到组合框ItemsSource,它期望一个IEnumerable,我不知道如何为此构建属性。我用了IList。
如果我走在正确的道路上并给我一些指示,有人可以告诉我吗?感谢
答案 0 :(得分:3)
我发现您发布的代码存在问题。实例访问者和DP注册中定义的类型需要达成一致。如果将typeof(int)更改为typeof(IList),则现有代码应该有效。
但通常最佳做法是使用满足属性要求的最低级别类型。基于此,如果要创建集合属性,请使用IEnumerable,除非您确实需要IList提供的功能。
答案 1 :(得分:1)
你能不能使用它?
public IEnumerable ItemsSource
{
get
{
return (IEnumerable)GetValue(ItemsSourceProperty);
}
set
{
SetValue(ItemsSourceProperty, value);
}
}
public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register("ItemsSource", typeof(IEnumerable), typeof(DateRangeControl), new PropertyMetadata(null));
IEnumerable可以在System.Collections.Generic
中找到