2008-08-11 12 views
11

Czy ktoś może wskazać mi na dobry zasób (lub rzucić mi wskazówkę), aby pokazać mi, jak wykonać DataBinding do kontroli (ComboBox, ListBox, itp.) W WPF? Jestem trochę zagubiony, gdy wszystkie moje zalety WinForm są mi odebrane, a ja nie jestem aż tak bystry na początek ...WPF Databinding

Odpowiedz

3

Uważam, że filmy instruktażowe pod adresem Windows Client .Net są równie niesamowite. Dot Net Rocks TV również to omawia jakiś czas temu.

+0

te linki wydają się teraz bełkotliwe (łącze klienta Windows .NET nawet nie rozwiązuje problemu z DNS) – Ortund

5

Najlepszy zasób jaki znalazłem dla wiązania danych WPF jest Bea Costa's blog. Rozpocznij od pierwszego postu i czytaj dalej. To jest zajebiste.

3

w kodzie z tyłu - ustaw DataContext w polu listy równym kolekcji, do której jesteś związany.

private void OnInit(object sender, EventArgs e) 
{ 
    //myDataSet is some IEnumerable 

    // myListBox is a ListBox control. 
    // Set the DataContext of the ListBox to myDataSet 
    myListBox.DataContext = myDataSet; 
} 

W XAML, Listbox może zadeklarować właściwości, które wiąże, używając składni "Binding".

<ListBox Name="myListBox" Height="200" 
    ItemsSource="{Binding Path=BookTable}" 
    ItemTemplate ="{StaticResource BookItemTemplate}"/> 
3

i kilka innych linków, tylko w przypadku, gdy powyższe nie wystarczyć:

Windows Presentation Foundation - Data Binding How-to Topics
- około 30 „jak” artykuły z MSDN.
„Tematy w tej sekcji opisano sposób korzystania z danych wiązania do wiązania elementów do danych z różnych źródeł danych w postaci plików wykonywalnych języka wspólnego (CLR) obiektów i XML.”

Moving Toward WPF Data Binding One Step at a Time
- By WPF guru Josh Smith "Ten artykuł wyjaśnia absolutne podstawy wiązania danych WPF, pokazuje cztery różne sposoby wykonywania tego samego prostego zadania, Każda iteracja zbliża się do najbardziej kompaktowej implementacji tylko XAML. brak doświadczenia w wiązaniu danych WPF. "

2

Są trzy rzeczy, które trzeba zrobić:

  1. Powiąż ItemsSource z ComboBox do listy opcji.
  2. Powiąż SelectedItem z właściwością, która zawiera zaznaczenie.
  3. Ustawienie składnika ComboBox.ItemTemplate na DataTemplate dla elementu ComboBoxItem.

Tak więc, na przykład, jeśli obiekt kontekst danych jest osoba mająca adresów e-mail, a chcesz wybrać ich głównym, użytkownik może mieć zajęcia z tymi podpisami:

public class EmailAddress 
{ 
    public string AddressAsString { get; set; } 
} 

public class Person 
{ 
    public IEnumerable<EmailAddress> EmailAddresses { get; } 
    public EmailAddress MainEmailAddress { get; set; } 
} 

Następnie można utworzyć pole kombi tak:

<ComboBox ItemsSource="{Binding EmailAddresses}" SelectedItem="{Binding MainEmailAddress}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <ComboBoxItem Content="{Binding AddressAsString}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

teraz trzeba zaimplementować INotifyPropertyChanged zarówno osoby i EmailAddress. W przypadku kolekcji EmailAddresses można ją zarchiwizować za pomocą ObjservableCollection.

Lub jako alternatywa można użyć Update Controls .NET. Jest to projekt typu open source, który zastępuje powiązanie danych i nie wymaga INotifyPropertyChanged.Możesz użyć dowolnej kolekcji, która ma sens, aby poprzeć właściwość EmailAddresses. XAML działa tak samo jak powyżej, z wyjątkiem tego, że zaimportowałeś przestrzeń nazw UpdateControls.XAML i zastąpiłeś {Binding ...} z {u: Update ...}.