2012-03-13 17 views
11

arkasında koduyla "{Binding}" Ben aşağıdaki özellik Temp2: (benim UserControl INotifyPropertyChanged uygulayan)seti xaml kodu 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)); 
    } 

Dinamik bir liste görünümü oluşturmanız gerekir. Ben XAML aşağıdaki liste görünümü vardır: C# ile liste görünümü liste görünümü doldurulan almaz doldurmak zaman

 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 

Şimdi C# ile aynı listview oluşturmaya çalışıyorum. Neyi yanlış yapıyorum?

cevap

15

Binding nesnesini oluşturmanız gerekir.

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

yapıcıya iletilen argüman XAML bağlantılardan alıştığınız Path olduğunu.

Yukarıda yaptığımız gibi Temp2 için DataContext ayarlarsanız Path ve Source dışarı bırakabilir, ama ben şahsen bir ViewModel (ya da diğer veri kaynağı) bağlamak tercih olduğunu düşünüyorum ve doğrudan bağlanma daha Path kullanmak bir sınıf üyesi.

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

Çalışmıyor Neden bilmiyor musunuz? –

1

Binding örneğinin bazı özelliklerini ayarlamanız gerekir. Sizin durumunuzda muhtemelen bu gibi bir şey olacaktır ...

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