Domanda

Qualcuno può indicarmi una buona risorsa (o darmi un indizio) per mostrarmi come eseguire DataBinding ai controlli (ComboBox, ListBox, ecc.) in WPF?Mi sento un po' perplesso quando tutte le qualità di WinForms mi vengono portate via, e non sono poi così brillante all'inizio...

È stato utile?

Soluzione

Trovo i video tutorial su Client Windows.Net altrettanto fantastico. Dot Net fa impazzire la TV se ne è occupato anche qualche tempo fa.

Altri suggerimenti

La migliore risorsa che ho trovato per l'associazione dati WPF è Il blog di Bea Costa.Inizia dal primo post e leggi avanti.È meraviglioso.

in code Behind: imposta il DataContext della casella di riepilogo uguale alla raccolta a cui ti stai collegando.

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;
}

In XAML, Listbox può dichiarare a quali proprietà si associa utilizzando la sintassi "Binding".

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

E qualche altro link, nel caso in cui quanto sopra non fosse sufficiente:

Windows Presentation Foundation - Argomenti illustrativi sull'associazione dati
- Circa 30 articoli "Come fare per" da MSDN.
"Gli argomenti in questa sezione descrivono come utilizzare l'associazione dati per associare elementi ai dati provenienti da una varietà di origini dati sotto forma di oggetti Common Language Runtime (CLR) e XML."

Verso l'associazione dei dati WPF un passo alla volta
- Dal guru del WPF Josh Smith
"Questo articolo spiega le nozioni di base assolute dell'associazione dati WPF.Mostra quattro modi diversi per eseguire lo stesso semplice compito.Ogni iterazione si avvicina all'implementazione più compatta possibile, solo XAML.Questo articolo è rivolto a persone senza esperienza nell'associazione dati WPF."

Ecco un'altra buona risorsa di MSDN: Panoramica sull'associazione dati.

Ci sono tre cose che devi fare:

  1. Associa ItemsSource del ComboBox all'elenco di opzioni.
  2. Associa SelectedItem alla proprietà che contiene la selezione.
  3. Imposta ComboBox.ItemTemplate su DataTemplate per un ComboBoxItem.

Quindi, ad esempio, se il tuo oggetto contesto dati è una persona che ha indirizzi email e desideri sceglierne l'indirizzo primario, potresti avere classi con queste firme:

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

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

Quindi potresti creare la casella combinata in questo modo:

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

Ora devi implementare INotifyPropertyChanged sia in Person che in EmailAddress.Per la raccolta EmailAddresses, potresti supportarla con un ObjservableCollection.

O in alternativa puoi usare Aggiorna controlli .NET.Questo è un progetto open source che sostituisce l'associazione dati e non richiede INotifyPropertyChanged.È possibile utilizzare qualsiasi raccolta abbia senso per supportare la proprietà EmailAddresses.XAML funziona come sopra, tranne per il fatto che importi lo spazio dei nomi UpdateControls.XAML e sostituisci {Binding ...} con {u:Update ...}.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top