Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Vinculação de dados - .NET SDK

Nesta página

  • Exemplos de vinculação de dados
  • Vinculação a um único Objeto de Realm
  • Vinculação a uma Realm collection
  • Vinculação de dados e MVVM

Em aplicativos .NET criados com Xamarin, MAUI, Avalonia UI e outras estruturas baseadas em MVVM, a vinculação de dados permite atualizações da UI quando um objeto ou collection subjacente é alterado e vice-versa.

Realm de domínio e coleções estão ativos e são atualizados automaticamente para refletir as alterações de dados. Isso ocorre porque os objetos de Realm implementam INotifyPropertyChanged e as collections do Realm implementam INotifyCollectionChanged. Quando você vincula coleções e objetos ativos à interface do usuário, a UI e os objetos ativos e as coleções são atualizados ao mesmo tempo.

Observação

Associações compiladas

O Realm SDK não suporta Ligações Compiladas.

Os seguintes trechos de código mostram C# e XAML para três casos de uso típicos de vinculação de dados. Todos eles usam os seguintes Objeto de Realm:

public partial class Employee : IRealmObject
{
[PrimaryKey]
[MapTo("_id")]
public ObjectId Id { get; set; } = ObjectId.GenerateNewId();
[MapTo("employee_id")]
public string EmployeeId { get; set; }
[MapTo("name")]
public string Name { get; set; }
[MapTo("items")]
public IList<Item> Items { get; }
}
public partial class Item : IRealmObject
{
[PrimaryKey]
[MapTo("_id")]
public ObjectId Id { get; set; } = ObjectId.GenerateNewId();
[MapTo("owner_id")]
public string OwnerId { get; set; }
[MapTo("summary")]
public string Summary { get; set; }
[MapTo("isComplete")]
public bool IsComplete { get; set; }
}

Observação

Evite usar ToList()

Como a collection do Realm está ativa, você não deve chamar ToList() ao obter uma collection de objeto de Realm. Isso força o carregamento da coleção da memória, de modo que a coleção resultante não seja mais um objeto ativo.

No exemplo a seguir, criamos uma propriedade pública do tipo Employee. Em outro lugar em nossa classe, fazemos uma query no nosso Realm para Employee com um "EmployeeId" de "123":

public Employee Employee123 { get; }
...
Employee123 = realm.All<Employee>()
.FirstOrDefault(e => e.EmployeeId == "123");

Em nosso XAML, vinculamos a propriedade Name do funcionário à propriedade Label de um controle Text :

<Label Text="{Binding Employee123.Name}"/>

Existem dois tipos de coleções aos quais podemos vincular. Primeiro, podemos vincular a uma coleção de objetos de Realm. Neste exemplo de código, criamos um IEnumerable público do objeto de Realm Employee e, em seguida, preenchemos essa coleção com todos os objetos da coleção Empregados:

public IEnumerable<Employee> Employees { get; }
...
Employees = realm.All<Employee>();

No arquivo XAML associado, vinculamos um ListView aos funcionários IEnumerable para mostrar uma lista de todos os funcionários. Nesse caso, estamos listando o valor "EmployeeId" de cada funcionário:

<ListView x:Name="listAllEmployees" ItemsSource="{Binding Employees}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding EmployeeId}"/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

Também podemos vincular a uma propriedade de collection de um Objeto de Realm. Neste exemplo, nos ligamos à propriedade Items de um Employee específico. A propriedade Items na classe Employee é do tipo IList<Item>.

public Employee Employee123 { get; }
...
IncompleteItems = Employee123.Items
.AsRealmQueryable()
.Where(i => i.IsComplete == false);

Observação

Observe que estamos chamando o método AsRealmQueryable() . Isso é necessário porque estamos filtrando a collection. Se quisermos listar todos os Itens na coleção Items , não precisamos chamar AsRealmQueryable().

A implementação do XAML é semelhante ao exemplo acima:

<ListView x:Name="listIncompleteItems" ItemsSource="{Binding IncompleteItems}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding Summary}"/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

Ao criar um aplicativo .NET usando o MVVM , você geralmente deseja a vinculação de dados adequada em ambas as direções entre a Visualização e o ViewModel: se um valor de propriedade for alterado na UI, o ViewModel deverá ser notificado e vice-versa. Os ViewModels normalmente implementam a INotifyPropertyChange interface para garantir isso.

No entanto, quando você vincula elementos da interface do usuário a um RealmObject, essa notificação acontece automaticamente, simplificando muito o código do ViewModel.

Você também pode vincular um elemento da interface do usuário a uma query ao vivo de realm . Por exemplo, se você vincular um ListView a uma query ativa, a lista será atualizada automaticamente quando os resultados da query forem alterados; você não precisa implementar a INotifyPropertyChange interface .

Por exemplo, se você vincular um ListView a uma query que retorna todos os objetos Product, a lista de produtos disponíveis será atualizada automaticamente quando um produto for adicionado, alterado ou removido do realm:

// Somewhere in your ViewModel
AllProducts = realm.All<Products>();
<!-- Somewhere in your View -->
<ListView ItemsSource="{Binding AllProducts}">

Voltar

Alterar um modelo de objeto