2009-12-01 1 views
1

Silverlight에서 사용자 지정 컨트롤을 만들 때 속성을 public으로 선언 할 수 있으며 XAML 선언을 만들 때 노출 될 것입니다.XAML을 통해 사용자 지정 Silverlight 컨트롤에 대해 목록 및 바인딩 속성 값 선언

public class MyControl : UserControl 
{ 
    public string Title {get; set;} 
} 

그리고이 : 그래서 쉽게 같은 것을 할 수있는 속성은 항상 간단한 유형, 나는 1 이상의 열을 정의하는 목록과 같은 복잡한 속성을 가질 수 없습니다 그러나

<local:MyControl Title="Hello World" /> 

i에 바인딩 할 필드를 식별합니다. 티. 기존의 컨트롤로 XAML에서이 값을 정의하는 구문은 정직 :

내가 클래스 정의에서이 작업을하는 방법에 대한 손실에 있어요 그러나
<local:MyControl Title="People List"> 
    <local:MyControl.Columns> 
     <local:MyControlColumn Heading="Column 1" Binding="{Binding Name}" /> 
     <local:MyControlColumn Heading="Column 2" Binding="{Binding Age}" /> 
    </local:MyControl.Columns> 
</local:MyControl> 

:

public class MyControl : UserControl 
{ 
    public string Title {get; set;} 
    public IEnumerable ItemSource {get; set;} 
    public ObservableCollection<MyControlColumn> Columns {get; set;} // ? 
} 

public class MyControlColumn 
{ 
    public string Heading {get; set;} 
    public ??? Binding {get; set;} // ? 
} 

수있는 사람 점 노출 된 목록 및 바인딩 속성을 만들기위한 올바른 방향으로 나에게?

답변

2

Columns 수집을 위해 설정 한 접근을 인스턴스 수집을 보유하고 제거하는 백업 개인 변수를 만들 : -

private ObservableCollection<MyControlColumn> _columns = new ObservableCollection<MyControlColumn>(); 
public ObservableCollection<MyControlColumn> Columns {get { return _columns; } } 

을 당신이 할 수 있습니다하면 바인딩 유형 자체 System.Windows.Data.Binding 인 것 같습니다 바인딩 속성에 대해. 그러나 일단 당신이 그것을 가지고 있으면 당신이 그 대상으로 무엇을 하려는지에 관해 좀 더 알 필요가 있다고 생각합니다.

당신은 MyControlTitle 재산에게하는 DependencyProperty을 고려해야한다 : -

public string Title 
{ 
    get { return (string)GetValue(TitleProperty); } 
    set { SetValue(TitleProperty, value); } 
} 

public static readonly DependencyProperty TitleProperty = 
     DependencyProperty.Register("Title", typeof(string), typeof(MyControl), null); 

이 유사 ItemSource을 위해 당신은 또한 기존의 컨트롤 규칙을 유지하기 위해 ItemsSource로 이름을 변경해야하지만.

나는 휠의 재발 명을 느낄 수 없으며, DataGrid 또는 ListBox 또는 다른 유사한 컨트롤을 사용하지 않을 수 있습니까?

+0

그게 내가하고있는 일을 설명해주었습니다. 실제로 설정에 따라 크게 맞춤화 된 DataGrid * 또는 ListBox처럼 작동하는 컨트롤이 필요합니다. 내 수업을 간단하게 포장하고 다시 사용하도록 계획하지만 제공된 값은 해당 컨트롤에 직접 적용되지 않으므로 (그 속성을 모두 공개하고 싶지는 않습니다.) 그 중 하나에서 상속받을 수는 없습니다. – David

관련 문제