2011-05-10 2 views
0

개인 필드를 ItemsControl의 ItemsSource로 사용 하시겠습니까?

클래스가 있습니다.

public partial class MyControl: UserControl{ 
    private ObservableCollection<string> names = 
      new ObservableCollection<string>(); 
    ... 
} 

xxxx 클래스의 XAML과 동일한 UserControl에 대한 XAML :

<UserControl x:Class="MyProject.MyControl" xmlns="..." xmlns:x="..."> 
    <ItemsControl ItemsSource="{Binding ???????}" /> 
</UserControl> 

???????ItemsSource을 코드 뒤에 names 필드가 있습니까? 방법이 있다면 올바른 방법은 무엇입니까? names가 필드가 아닌 종속성 속성 일 수있는 방법이 없다면?

답변

3

당신은 그것은 종속성 속성 일 필요는 없습니다 이름

public IEnumerable<string> Names 
{ 
    get{return names;} 
} 

위한 공공 게터 속성을 확인해야합니다.

그리고 다음 XAML은

<ItemsControl ItemsSource="{Binding Names}" /> 

편집 할 수 있습니다 : 그냥 제목을 다시 읽어보십시오. 이름을 비공개로 유지하려면 코드 뒤에 바인딩을해야합니다.

 Binding b = new Binding(); 
     b.Source = names; 
     itemsControl.SetBinding(ItemsControl.ItemsSourceProperty, b); 
+0

올바른 방법은 무엇입니까? 그러나 사실을 공개 할 때 '이름'을 공개해야합니다. 이제 모든 사람이 이름에 무언가를 추가 할 수 있습니다. – drasto

+1

코드를 뒤에 사용하거나 이름 컬렉션을 IEnumerable 으로 표시 할 수 있습니다. 이는 읽기 전용이기 때문입니다. – wangburger

+0

아니면 그냥 바인딩을하지 않고 ItemsControl의 ItemsSource에'names'를 직접 할당 할 수 있습니다 ... –

관련 문제