2009-05-28 1 views
3

私はカスタムのSilverlightコントロールを作成しました。これは、2つの日付ピッカーと1つのコンボボックスで構成されています。私はコンボボックスをデータバインド可能にしたいと思います。私はDependencyPropertyを利用する必要があることを知っています。私が確信していないのは、それを構築する方法です。Silverlightカスタムコントロールのプロパティをデータバインド可能にするにはどうすればいいですか?

#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 

問題は、私が見てきたすべてのサンプルは、いずれかの文字列、int型、または色を期待テキストや背景ウィッヒのような単純な性質のためであるということです。ここで私が持っているコードです。私はコンボボックスのItemsSourceにバインドしようとしているので、IEnumerableを期待しています。このプロパティを構築する方法はわかりませんでした。私はIListを使いました。

私は正しい道を歩いていると私に知らせてくれますか?ありがとう

答えて

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

+0

これを行うと、getとsetはまったく呼び出されません。 –

+2

getとsetを呼び出す必要はありません。プロパティの実際の値は、自動的にどこに格納されます。 GetValueとSetValueがプロパティ内で使用され、DependancyPropertyシステムがそれを格納する場所から値を取得するのはこのためです。 – Sekhat

3

で見つけることができます。インスタンスアクセサーとDPの登録で定義されたタイプが同意する必要があります。 typeof(int)からtypeof(IList)に変更すると、既存のコードが機能します。

しかし、プロパティの要件を満たす最低レベルのタイプを使用することが通常はベストプラクティスです。それに基づいて、IListによって提供される機能が本当に必要でない限り、コレクションプロパティを作成する場合は、IEnumerableを使用します。

関連する問題