Exibir clientes em uma lista
A exibição e a manipulação de dados reais na interface do usuário é essencial para a funcionalidade de muitos aplicativos. Este artigo mostrará o que você precisa saber para exibir uma coleção de objetos de cliente em uma lista.
Este não é um tutorial. Caso precise de um, veja nosso tutorial de associação de dados, que fornecerá uma experiência guiada passo a passo.
Vamos começar com uma rápida apresentação da associação de dados: o que é e como funciona. Em seguida, vamos adicionar um ListView à interface do usuário, adicionar a associação de dados e personalizar a associação de dados com recursos adicionais.
O que você precisa saber?
A associação de dados é uma maneira de exibir dados de um aplicativo na interface do usuário. Isso permite a separação de questões em seu aplicativo, mantendo a interface do usuário separada do outro código. Isso cria um modelo conceitual limpo mais fácil de ler e de manter.
Cada associação de dados tem duas partes:
- Uma fonte que fornece os dados a serem associados.
- Um destino na interface do usuário onde os dados são exibidos.
Para implementar uma associação de dados, é necessário adicionar código à fonte que fornece dados para a associação. Você também precisará adicionar uma ou duas extensões de marcação ao seu XAML para especificar as propriedades da fonte de dados. Veja a seguir a diferença chave entre as duas:
- x:Bind é fortemente tipada e gera código no tempo de compilação para melhorar o desempenho. x:Bind tem como padrão uma associação ocasional, que otimiza a exibição rápida de dados somente leitura que não mudam.
- Binding é fracamente tipada e montada no runtime. Isso resulta em um desempenho inferior em comparação com x:Bind. Em quase todos os casos, você deve usar x:Bind em vez de Binding. No entanto, é provável que você a encontre em código mais antigo. Binding é padronizada para transferência de dados unidirecional, a qual é otimizada para dados somente leitura que podem mudar na origem.
É recomendável usar x:Bind sempre que possível e mostraremos isso em snippets deste artigo. Para saber mais sobre as diferenças, consulte a Comparação entre os recursos {x:Bind} e {Binding}.
Criar uma fonte de dados
Primeiro, você precisará de uma classe para representar os dados do cliente. Para que você tenha um ponto de referência, mostraremos o processo neste exemplo básico:
public class Customer
{
public string Name { get; set; }
}
Cria uma lista
Para poder exibir clientes, você precisa criar a lista para armazená-los. O ListView é um controle XAML básico ideal para essa tarefa. No momento, o ListView requer uma posição na página e em breve exigirá um valor para a propriedade ItemSource.
<ListView ItemsSource=""
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
Depois de associar os dados ao ListView, incentivamos você a retornar à documentação e experimentar a personalização de sua aparência e seu layout para melhor atender às suas necessidades.
Associar dados à sua lista
Agora que você criou uma interface do usuário básica para manter suas associações, é necessário configurar a fonte para fornecê-las. Veja a seguir um exemplo de como isso pode ser feito:
public sealed partial class MainPage : Page
{
public ObservableCollection<Customer> Customers { get; }
= new ObservableCollection<Customer>();
public MainPage()
{
this.InitializeComponent();
// Add some customers
this.Customers.Add(new Customer() { Name = "NAME1"});
this.Customers.Add(new Customer() { Name = "NAME2"});
this.Customers.Add(new Customer() { Name = "NAME3"});
}
}
<ListView ItemsSource="{x:Bind Customers}"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Customer">
<TextBlock Text="{x:Bind Name}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
A Visão geral da Associação de Dados guia você por um problema semelhante na seção sobre associação a uma coleção de itens. Nosso exemplo aqui mostra as seguintes etapas cruciais:
- No code-behind da sua interface do usuário, crie uma propriedade do tipo ObservableCollection<T> para manter os objetos de Cliente.
- Associe o ItemSource do seu ListView a essa propriedade.
- Forneça um ItemTemplate básico para ListView, que vai configurar como cada item na lista é exibido.
Fique à vontade para consultar a documentação do ListView se quiser personalizar o layout, adicionar uma seleção de itens ou ajustar o DataTemplate recém-criado. Mas e se você desejar editar seus clientes?
Editar clientes pela interface do usuário
Você exibiu os clientes em uma lista, mas a associação de dados permite que você faça mais que isso. E se fosse possível editar os dados diretamente na interface do usuário? Para tal, primeiramente vamos falar sobre os três modos de associação de dados:
- Única: essa associação de dados é ativada apenas uma vez e não reage às mudanças.
- Unidirecional: essa associação de dados atualizará a interface do usuário com todas as alterações feitas na fonte de dados.
- Bidirecional: essa associação de dados atualizará a interface do usuário com todas as alterações feitas na fonte de dados e também atualizará os dados com todas as alterações feitas na interface do usuário.
Se você seguiu os snippets de código anteriores, a associação feitas usa x:Bind e não especifica um modo, transformando-a em uma associação Ocasional. Se você desejar editar seus clientes diretamente na interface do usuário, será necessário alterá-la para uma associação Bidirecional para que as alterações dos dados sejam passadas para os objetos de cliente. Para saber mais, consulte Associação de dados em detalhes.
A associação bidirecional também atualizará a interface do usuário se a fonte de dados for alterada. Para que isso funcione, você deve implementar INotifyPropertyChanged na origem e verificar se os setters de propriedade emitem o evento PropertyChanged. É prática comum que eles chamem um método auxiliar como o OnPropertyChanged, conforme mostrado abaixo:
public class Customer : INotifyPropertyChanged
{
private string _name;
public string Name
{
get => _name;
set
{
if (_name != value)
{
_name = value;
this.OnPropertyChanged();
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string propertyName = null) =>
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
Em seguida, transforme o texto de ListView em editável usando um TextBox em vez de um TextBlock e certifique-se de definir o Modo em suas associações de dados como Bidirecional.
<ListView ItemsSource="{x:Bind Customers}"
HorizontalAlignment="Center"
VerticalAlignment="Center">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Customer">
<TextBox Text="{x:Bind Name, Mode=TwoWay}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Uma maneira rápida de garantir que isso funcione é adicionar um segundo ListView com os controles TextBox e as associações Unidirecionais. Os valores na segunda lista serão alterados automaticamente enquanto você edita a primeira.
Observação
A edição diretamente dentro de um ListView é uma maneira simples de mostrar a associação bidirecional em ação, mas pode resultar em complicações de usabilidade. Se quiser que seu aplicativo vá mais longe, considere o uso de outros controles XAML para editar seus dados e manter o ListView como somente para exibição.
Aprofundamento
Agora que você já criou uma lista de clientes com a associação bidirecional, fique à vontade para consultar os documentos enviados e experimentar. Você também pode conferir o tutorial de associação de dados caso deseje ver um passo a passo de associações básicas e avançadas ou investigar os controles, como o padrão de lista/detalhes, para criar uma interface do usuário mais robusta.
APIs e documentos úteis
Veja a seguir um resumo rápido de APIs e outras documentações úteis que ajudarão você a começar a trabalhar com a Associação de Dados.
APIs úteis
API | Descrição |
---|---|
Modelo de dados | Descreve a estrutura visual de um objeto de dados, permitindo a exibição de elementos específicos da interface do usuário. |
x:Bind | Documentação sobre a extensão de marcação x:Bind recomendada. |
Associação | Documentação sobre a extensão de marcação de Associação antiga. |
ListView | Um controle da interface do usuário que exibe itens de dados em uma pilha vertical. |
TextBox | Um controle de texto básico para exibir os dados de texto editáveis na interface do usuário. |
INotifyPropertyChanged | A interface para tornar dados observáveis, fornecendo-os a uma associação de dados. |
ItemsControl | A propriedade ItemsSource dessa classe permite que um ListView associe-se a uma fonte de dados. |
Documentos úteis
Tópico | Descrição |
---|---|
Vinculação de dados em detalhes | Uma visão geral básica dos princípios da associação de dados |
Visão geral da Associação de Dados | Informações conceituais detalhadas sobre a associação de dados. |
Exibição de Lista | Informações sobre como criar e configurar um ListView, incluindo a implementação de um DataTemplate |
Exemplos de código úteis
Exemplo de código | Descrição |
---|---|
Tutorial de associação de dados | Uma experiência guiada passo a passo das noções básicas da associação de dados. |
ListView e GridView | Explore ListViews mais elaboradas com associação de dados. |
QuizGame | Consulte a associação de dados em ação, incluindo a classe BindableBase (na pasta "Common") para uma implementação padrão de INotifyPropertyChanged. |