Pergunta

Alguém pode me indicar um bom recurso (ou me dar uma pista) para me mostrar como fazer DataBinding para controles (ComboBox, ListBox, etc.) no WPF?Fico um pouco perdido quando todas as minhas gentilezas do WinForms são tiradas de mim, e não sou tão inteligente para começar ...

Foi útil?

Solução

Encontro os vídeos tutoriais em Cliente Windows .Net igualmente incrível. Dot Net arrasa na TV também cobriu isso há algum tempo.

Outras dicas

O melhor recurso que encontrei para vinculação de dados WPF é Blog de Bia Costa.Comece pela primeira postagem e leia adiante.É incrivel.

no code-behind – defina o DataContext da sua caixa de listagem igual à coleção à qual você está vinculando.

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

No XAML, o Listbox pode declarar quais propriedades ele se vincula usando a sintaxe "Binding".

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

E mais alguns links, caso o acima não seja suficiente:

Windows Presentation Foundation - Tópicos de instruções sobre vinculação de dados
- Aproximadamente 30 artigos 'Como fazer' do MSDN.
"Os tópicos nesta seção descrevem como usar a vinculação de dados para vincular elementos a dados de uma variedade de fontes de dados na forma de objetos CLR (Common Language Runtime) e XML."

Avançando em direção à vinculação de dados WPF, uma etapa de cada vez
- Por guru do WPF Josh Smith
"Este artigo explica os fundamentos absolutos da vinculação de dados do WPF.Ele mostra quatro maneiras diferentes de realizar a mesma tarefa simples.Cada iteração se aproxima da implementação mais compacta possível somente XAML.Este artigo é para pessoas sem experiência em vinculação de dados WPF."

Aqui está outro bom recurso do MSDN: Visão geral da vinculação de dados.

Há três coisas que você precisa fazer:

  1. Vincule o ItemsSource do ComboBox à lista de opções.
  2. Vincule o SelectedItem à propriedade que contém a seleção.
  3. Defina ComboBox.ItemTemplate como DataTemplate para um ComboBoxItem.

Assim, por exemplo, se o seu objeto de contexto de dados for uma pessoa com endereços de e-mail e você quiser escolher o principal, poderá ter classes com estas assinaturas:

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

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

Então você poderia criar a caixa de combinação assim:

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

Agora você precisa implementar INotifyPropertyChanged em Person e EmailAddress.Para a coleção EmailAddresses, você pode apoiá-la com um ObjservableCollection.

Ou como alternativa você pode usar Atualizar controles .NET.Este é um projeto de código aberto que substitui a vinculação de dados e não requer INotifyPropertyChanged.Você pode usar qualquer coleção que faça sentido para apoiar a propriedade EmailAddresses.O XAML funciona da mesma forma que acima, exceto que você importa o namespace UpdateControls.XAML e substitui {Binding ...} por {u:Update ...}.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top