2009-05-28 2 views
3

저는 두 개의 날짜 선택기와 콤보 박스로 구성된 사용자 정의 실버 라이트 컨트롤을 만들었습니다. 콤보 박스를 데이터 바인딩 가능하게 만들고 싶습니다. 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을 사용하십시오.

관련 문제