Passo a passo: Criando uma associação de dados usando o WPF Designer

Esta explicação passo a passo mostra como usar o WPF Designer for Visual Studio para criar ligações de dados que os dados conectar a um controle. 

In this walkthrough, you perform the following tasks:

  • Create the project.

  • Criar um Student classe e um StudentList coleção.

  • Criar um ListBox controle que exibe o StudentListacoleção por meio de uma vinculação de dados.

  • Criar uma personalizada DataTemplate que usa um IValueConverter para personalizar a aparência de umapropriedadede booliano.

Quando tiver terminado, você terá uma caixa de listagem que é limite a uma lista dos alunos. Para cada caixa de listagem item, é exibido um quadrado colorido que indica se o aluno está atualmente inscrito.

ObservaçãoObservação

Vincular aos dados a partir de uma conexão de dados, use a janelade fontes de dados. For more information, see Controles do WPF de ligação a dados em Visual Studio.

ObservaçãoObservação

Caixas de diálogo e comandos de menu que você vê podem diferir das descritas na Help dependendo das suas configurações ativas ou edição. Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu. For more information, see Trabalhando com configurações.

Pré-requisitos

You need the following components to complete this walkthrough:

  • Visual Studio 2010.

Creating the Project

A primeira etapa é criar o projeto do aplicativo WPF e adicionar a fonte de dados. A fonte de dados é um ObservableCollection<T> que contém as instâncias de um simples Studentclasse. O projeto também tem um IValueConverter e um personalizado DataTemplate ao estilo de ListBox de controle.

To create the project

  1. Criar um aplicativo WPF novo projeto no Visual Basic ou no Visual C# chamado DataBindingDemo. For more information, see Como: Criar um novo projeto de aplicativo WPF.

    MainWindow. XAML é aberto no WPF Designer.

  2. Adicionar uma nova classe chamada Student para o projeto. For more information, see Como: Adicionar novos itens de projeto.

  3. Replace the automatically generated code with the following code.

    Imports System
    Imports System.Collections.ObjectModel
    Imports System.Windows
    
    ' Student is a simple class that stores a name and an 
    ' IsEnrolled value. 
    Public Class Student
    
        ' The default constructor is required for creation from XAML. 
        Public Sub New()
        End Sub
    
        ' The StudentName property is a string that holds the first and last name. 
        Public Property StudentName As String
    
        ' The IsEnrolled property gets or sets a value indicating whether 
        ' the student is currently enrolled. 
        Public Property IsEnrolled As Boolean
    
    End Class
    
    ' The StudentList collection is declared for convenience, 
    ' because declaring generic types in XAML is inconvenient. 
    Public Class StudentList
        Inherits ObservableCollection(Of Student)
    End Class
    
    using System;
    using System.Collections.ObjectModel;
    using System.Windows;
    
    namespace DataBindingDemo
    {
        // Student is a simple class that stores a name and an
        // IsEnrolled value.
        public class Student 
        {   
            // The default constructor is required for creation from XAML.
            public Student()
            {
            }
    
            // The StudentName property is a string that holds the first and last name.
            public string StudentName { get; set; }
    
            // The IsEnrolled property gets or sets a value indicating whether
            // the student is currently enrolled.
            public bool IsEnrolled { get; set; }
        }
    
        // The StudentList collection is declared for convenience,
        // because declaring generic types in XAML is inconvenient.
        public class StudentList : ObservableCollection<Student>
        {
    
        }
    }
    
  4. Adicionar uma nova classe chamada BoolToBrushConverter para o projeto.

  5. Replace the automatically generated code with the following code.

    Imports System
    Imports System.Globalization
    Imports System.Windows.Data
    Imports System.Windows.Media
    
    ' The BoolToBrushConverter class is a value converter 
    ' that helps to bind a bool value to a brush property. 
    <ValueConversion(GetType(Boolean), GetType(Brush))> _
    Public Class BoolToBrushConverter
        Implements IValueConverter
    
        Public Function Convert( _
            ByVal value As Object, _
            ByVal targetType As Type, _
            ByVal parameter As Object, _
            ByVal culture As CultureInfo) As Object Implements IValueConverter.Convert
    
            Dim b As Brush = Nothing
    
            ' Only apply the conversion if value is assigned and 
            ' is of type bool. 
            If value IsNot Nothing AndAlso value.[GetType]() Is GetType(Boolean) Then
                ' true is painted with a green brush, 
                ' false with a red brush. 
                b = If(CBool(value), Brushes.Green, Brushes.Red)
            End If
    
            Return b
        End Function
    
        ' Not used. 
        Public Function ConvertBack( _
            ByVal value As Object, _
            ByVal targetType As Type, _
            ByVal parameter As Object, _
            ByVal culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
            Return Nothing
        End Function
    
    End Class
    
    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Linq;
    using System.Text;
    using System.Windows.Data;
    using System.Windows.Media;
    
    namespace DataBindingDemo
    {
        // The BoolToBrushConverter class is a value converter
        // that helps to bind a bool value to a brush property.
        [ValueConversion(typeof(bool), typeof(Brush))]
        public class BoolToBrushConverter : IValueConverter
        {
            public object Convert(
                object value, 
                Type targetType, 
                object parameter, 
                CultureInfo culture)
            {
                Brush b = null;
    
                // Only apply the conversion if value is assigned and
                // is of type bool.
                if (value != null &&
                    value.GetType() == typeof(bool))
                {
                    // true is painted with a green brush, 
                    // false with a red brush.
                    b = (bool)value ? Brushes.Green : Brushes.Red;
                }
    
                return b;
            }
    
            // Not used.
            public object ConvertBack(
                object value, 
                Type targetType, 
                object parameter, 
                CultureInfo culture)
            {
                return null;
            }
        }
    }
    
  6. Build the project.

  7. Abrir MainWindow. XAML na WPF Designer.

  8. Replace the automatically generated XAML with the following XAML.

        <Window x:Class="DataBindingDemo.MainWindow"
            xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:DataBindingDemo"
            Title="Databinding Demo" Height="300" Width="300">
        <Window.Resources>
    
            <local:StudentList x:Key="studentCollection" >
                <local:Student StudentName="Syed Abbas" IsEnrolled="false" />
                <local:Student StudentName="Lori Kane" IsEnrolled="true" />
                <local:Student StudentName="Steve Masters" IsEnrolled="false" />
                <local:Student StudentName="Tai Yee" IsEnrolled="true" />
                <local:Student StudentName="Brenda Diaz" IsEnrolled="true" />
            </local:StudentList>
    
            <local:BoolToBrushConverter x:Key="boolToBrushConverter" />
    
            <DataTemplate x:Key="listBoxTemplate">
                <StackPanel Orientation="Horizontal" >
                    <Rectangle Fill="{Binding Path=IsEnrolled, Converter={StaticResource boolToBrushConverter}}"
                               Height="10" 
                               Width="10" 
                               Margin="0,0,5,0" />
                    <TextBlock Text="{Binding Path=StudentName}" />
                </StackPanel>
            </DataTemplate>
    
        </Window.Resources>
        <Grid></Grid>
    
    </Window>
    

Atribuindo uma vinculação de dados

Você pode usar um Binding para exibir o studentCollection no ListBox de controle. O WPF Designer permite a vinculação de dados sem escrever qualquer código ou XAML.

Para ligar o ListBox a fonte de dados

  1. From the Toolbox, drag a ListBox control onto the Window.

  2. No janela Propriedades, role até o ItemsSource propriedade.

  3. Na borda da coluna esquerda, clique na o marcador depropriedade (marcador de propriedade).

    Aparecerá um menu .

    Dica

    Você também pode direita-clique na linha para exibir o menu.

  4. Clique em Aplicar a vinculação de dados.

    O construtor de vinculação de dados aparece.

    construtor de associação de dados

  5. Sobre o fonte painel, no painel esquerdo, clique em StaticResource.

  6. No painel central, clique em Recursos.

  7. No painel direito, clique em studentCollection.

    O ListBox controle é preenchido com itens.

  8. No janela Propriedades, role até o DisplayMemberPath propriedade e defina seu valor como StudentName.

    O ListBox controle exibe o StudentNamedepropriedade para cada Student instância em studentCollection.

    Associação de dados de ListBox

A criação de uma ligação de dados com um conversor de Valor

criar um DataTemplate para formatar os dados na ListBox de controle. Neste projeto, o DataTemplate usa um valor conversor para exibir umapropriedade boolianocomo um quadrado colorido.

Para criar uma vinculação de dados com um valor de conversor

  1. No janela Propriedades, limpar o DisplayMemberPath propriedade.

  2. Rolar para a ItemTemplatedepropriedade.

  3. Clique o o marcador depropriedade (marcador de propriedade).

  4. Clique em Aplicar o recurso.

    O selecionador de recurso é exibida.

  5. No Local seção, clique em listBoxTemplate.

    O ListBox controle exibe um quadrado vermelho ou verde, próximo ao nome de cada aluno que indica se o aluno está inscrito.

    Associação de dados de ListBox com um conversor de valores

Próximas etapas

Consulte também

Referência

Binding

ListBox

ItemTemplate

IValueConverter

Conceitos

Revisão de Associação de Dados

Outros recursos

Trabalhando com o designer WPF