2012-03-13 2 views
11

뒤에 코드 "{바인딩}"나는이 다음과 같은 특성 Temp2 : (내의 UserControl에서 INotifyPropertyChanged를 구현)세트 XAML 코드 ItemsSource =

ObservableCollection<Person> _Temp2; 
    public ObservableCollection<Person> Temp2 
    { 
     get 
     { 
      return _Temp2; 
     } 
     set 
     { 
      _Temp2 = value; 
      OnPropertyChanged("Temp2"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged = delegate { }; 

    private void OnPropertyChanged(string propertyName) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

나는 동적으로 목록보기를 만들어야합니다. 나는 XAML에서 다음 목록보기이 : 나는 C 번호와 목록보기 목록보기가 채워되지 않습니다를 채울 때

 ListView listView1 = new ListView(); 
     listView1.DataContext = Temp2; 
     listView1.ItemsSource = Temp2; // new Binding(); // ????? how do I have to implement this line 
     listView1.IsSynchronizedWithCurrentItem = true; 
     //.. etc 

:

<ListView 
    Name="listView1" 
    DataContext="{Binding Temp2}" 
    ItemsSource="{Binding}" 
    IsSynchronizedWithCurrentItem="True"> 
<ListView.View> 
.... etc 

는 지금은로 C#을 가진 동일한 목록보기를 만들려고하고 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

15

Binding 개체를 만들어야합니다.

Binding b = new Binding("Temp2") { 
    Source = this 
}; 
listView1.SetBinding(ListView.ItemsSourceProperty, b); 

생성자에 전달 된 인수는 XAML 바인딩에서 사용하고있는 Path입니다.

위처럼 당신이 Temp2DataContext를 설정 한 경우는 PathSource을 남길 수 있습니다,하지만 난 개인적으로는 뷰 모델 (또는 다른 데이터 소스)에 결합하는 것이 바람직하다고 생각과 직접 결합하는 것보다 Path를 사용 반원.

0
listView1.SetBinding(ListView.ItemsSourceProperty, new Binding()); 
+0

왜 작동하지 않습니까? –

1

Binding 인스턴스의 일부 속성을 설정해야합니다. 귀하의 경우 그것은 아마 같은 것일 것입니다 ...

listView1.SetBinding(ListView.ItemsSourceProperty, new Binding { Source = Temp2 }); 
관련 문제