Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Uma aplicação de interface de utilizador multi-plataforma .NET (.NET MAUI) consiste em um ou mais páginas, cada uma das quais normalmente contém múltiplos objetos de interface de utilizador chamados "views". Uma das principais tarefas da aplicação é manter estas vistas sincronizadas e acompanhar os vários valores ou seleções que representam. Muitas vezes, as vistas representam valores de uma fonte de dados subjacente, e os utilizadores manipulam essas vistas para alterar esses dados. Quando a vista muda, os dados subjacentes devem refletir essa mudança e, de forma semelhante, quando os dados subjacentes mudam, essa alteração deve ser refletida na visão.
Para gerir estas alterações com sucesso, a aplicação deve ser notificada de alterações nessas vistas ou dos dados subjacentes. A solução comum é definir eventos que sinalizem quando ocorre uma mudança. Pode então ser instalado um gestor de eventos que é notificado destas alterações. Responde transferindo dados de um objeto para outro. No entanto, quando há muitas visualizações, também devem existir muitos gestores de eventos, o que resulta em muito código padrão.
A ligação de dados automatiza esta tarefa e torna os gestores de eventos desnecessários. As ligações de dados podem ser implementadas tanto em XAML como em código, mas são muito mais comuns em XAML, onde ajudam a reduzir o tamanho do ficheiro code-behind. Ao substituir o código procedural nos gestores de eventos por código declarativo ou marcação, a aplicação é simplificada e clarificada.
A ligação de dados é, portanto, a técnica de ligar propriedades de dois objetos para que as alterações numa propriedade sejam automaticamente refletidas na outra. Um dos dois objetos envolvidos numa ligação de dados é quase sempre um elemento que deriva de View e faz parte da interface visual de uma página. O outro objeto é um dos seguintes:
- Outro View derivativo, geralmente na mesma página.
- Um objeto num ficheiro de código.
As ligações de dados entre duas View derivadas são frequentemente apresentadas nestes artigos, para fins de clareza e simplicidade. No entanto, os mesmos princípios podem ser aplicados a ligações de dados entre a View e outros objetos. Quando uma aplicação é construída usando a arquitetura Model-View-ViewModel (MVVM), a classe com os dados subjacentes é frequentemente chamada de viewmodel.
Importante
O .NET MAUI coordena as atualizações de vinculação para o thread da interface do utilizador. Ao usar o MVVM, isto permite atualizar propriedades do modelo de visualização vinculado a dados de qualquer thread, com o motor de binding do .NET MAUI a trazer as atualizações para o thread da interface.
Advertência
O auto-marshaling aplica-se apenas a INotifyPropertyChanged.PropertyChanged notificações.
ObservableCollection<T> mutações (Adicionar, Remover, Limpar, etc.) não são automaticamente direcionadas para o tópico da interface. Chamar estes métodos a partir de um thread em segundo plano surge CollectionChanged nesse thread, o que pode causar uma exceção na interface ou corrupção do layout.
Despacha sempre as mutações da coleção para o tópico principal:
// Option 1: dispatch mutations to the main thread
await Task.Run(async () =>
{
var newItems = await api.FetchItemsAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
foreach (var item in newItems)
Items.Add(item);
});
});
// Option 2: replace the whole collection (PropertyChanged is auto-marshaled)
var newItems = await Task.Run(() => api.FetchItemsAsync());
Items = new ObservableCollection<MyItem>(newItems); // safe — raises PropertyChanged
Procurar o exemplo