Controles de itens XAML; associar a uma coleção C++/WinRT
Artigo
Uma coleção que pode ser efetivamente vinculada a um controle de itens XAML é conhecida como uma coleção observável. Essa ideia baseia-se no padrão de design de software conhecido como o padrão do observador. Este tópico mostra como implementar coleções observáveis em C++/WinRT e como associar controles de itens XAML a elas (para obter informações em segundo plano, confira Vinculação de dados).
Se você deseja acompanhar este tópico, recomendamos que crie primeiro o projeto descrito em Controles XAML; associar a uma propriedade de C++/WinRT. Este tópico adiciona mais código e expande os conceitos explicados naquele tópico.
Se uma classe de runtime que representa uma coleção escolhe acionar o evento IObservableVector<T>::VectorChanged sempre que um elemento é adicionado ou removido dele, então a classe de runtime é uma coleção observável. Um controle de itens XAML pode se associar e manipular esses eventos, recuperando a coleção atualizada e, em seguida, atualizando a si mesmo para mostrar os elementos atuais.
Observação
Para obter informações sobre como instalar e usar o C++/WinRT Visual Studio Extension (VSIX) e o pacote NuGet (que juntos fornecem um modelo de projeto e suporte ao build), confira as informações de suporte do Visual Studio para C++/WinRT.
Adicionar uma coleção BookSkus a BookstoreViewModel
Na listagem MIDL 3.0 acima, observe que o tipo da propriedade BookSkus é IObservableVector de BookSku. Na próxima seção deste tópico, associaremos a fonte de itens de uma ListBox a BookSkus. Uma caixa de listagem é um controle de itens e, para definir corretamente a propriedade ItemsControl.ItemsSource, é necessário defini-la como um valor do tipo IObservableVector ou IVector, ou de um tipo de interoperabilidade como IBindableObservableVector.
Aviso
O código mostrado neste tópico se aplica ao C++/WinRT 2.0.190530.8 e superior. Se estiver usando uma versão anterior, você precisará fazer alguns pequenos ajustes no código mostrado. Na listagem MIDL 3.0 acima, altere a propriedade BookSkus para IObservableVector de IInspectable. E, em seguida, use IInspectable (em vez de BookSku) em sua implementação, também.
Salve e compile. Copie os stubs de acessador de BookstoreViewModel.h e BookstoreViewModel.cpp na pasta \Bookstore\Bookstore\Generated Files\sources (para saber mais, confira o tópico anterior, Controles XAML; associar a uma propriedade de C++/WinRT). Implemente os stubs de acessador dessa forma.
Abra MainPage.xaml, que contém a marcação XAML para a página principal da interface do usuário. Adicione a seguinte marcação dentro do mesmo StackPanel que Button.
Agora compile e execute o projeto. Clique no botão para executar o manipulador de eventos Click. Vimos que a implementação de Append aciona um evento para informar à interface do usuário que a coleção foi alterada; a ListBox consulta novamente a coleção para atualizar seu próprio valor de Items. Exatamente como antes, o título de um dos livros muda e essa alteração de título é refletida no botão e na caixa de listagem.
Crie uma interface do usuário com associação de dados. Sua interface do usuário é atualizada automaticamente com base nos dados mais recentes, enquanto os dados são atualizados em resposta a alterações na interface do usuário.
Um valor escalar ou de matriz precisa ser encapsulado em um objeto de classe de referência antes de ser passado para uma função que espera **IInspectable**. Esse processo de encapsulamento é conhecido como **conversão** do valor.
Uma propriedade que pode ser efetivamente vinculada a um controle de itens XAML é conhecida como uma propriedade *observável*. Este tópico mostra como implementar e consumir uma propriedade observável e como associar um controle XAML a ela.
Este tópico orienta você pelas etapas de criação de um controle personalizado simples usando C++/WinRT. Você pode usar as informações aqui como base para criar seus próprios controles de interface do usuário personalizáveis e ricos em recursos.