如何使Silverlight自定义控件的属性可绑定?

时间:2009-05-28 15:01:51

标签: silverlight data-binding controls

我创建了一个自定义的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。

如果我走在正确的道路上并给我一些指示,有人可以告诉我吗?感谢

2 个答案:

答案 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

中找到