Исходя из нашего существующего проекта, нет проблем с совместимостью.
Для ограничения политики я могу поделиться нашим кодом.Но я нашел третью ссылку для вашей справки:
Создание базы данных Azure Cosmos.
Создание приложения Xamarin.Forms: Откройте Visual Studio 2017 -> Пуск -> Новый проект-> Выбрать кросс-платформенный (в Visual C # -> Кросс-платформенный -> Мобильное приложение (Xamarin.Forms) -> ДатьПодходящее имя для вашего приложения (XamFormStudCos) -> ОК.
Выберите кроссплатформенный шаблон как Пустое приложение -> Установить платформу как Android, iOS и UWP и стратегию совместного использования кода как Общий проект.
Добавьте справочник Microsoft.Azure.DocumentDB.Core.
Добавьте класс Connection.cs для учетной записи xamstudcosmos (CosmosDB):
using Newtonsoft.Json;
public class Connection {
public static readonly string EndpointUri = "https://xamstudcosmos.documents.azure.com:443/";
public static readonly string PrimaryKey = "r03kRnNeyU3Bij7b9TZgsrkoKoU2ERdWM2d2jMAaaKWFClSJobyC8SyXmeazwKEwm8c2UhEjCNDU9NhI4grEFQ==";
public static readonly string DatabaseName = "StudentDB";
public static readonly string CollectionName = "Student";
}
Сначала с помощью MVC создайте модельПапка и добавить класс StudentDetail для данных Модель:
public class StudentDetail {
[JsonProperty(PropertyName = "id")]
public string Id {
get;
set;
}
[JsonProperty(PropertyName = "name")]
public string Name {
get;
set;
}
[JsonProperty(PropertyName = "Age")]
public string Age {
get;
set;
}
}
Создать папку контроллера и добавить IDocumentDИнтерфейс BService для DocumentDB:
using System.Threading.Tasks;
using XamFormStudCos.Model;
public interface IDocumentDBService {
Task CreateDatabaseAsync(string databaseName);
Task CreateDocumentCollectionAsync(string databaseName, string collectionName);
Task < List < StudentDetail >> GetStoreInfoAsync();
Task SaveStudentDetailAsync(StudentDetail stud, bool isNewstudent);
Task DeleteStudentAsync(string id);
}
Добавить класс DocumentDBService для реализации интерфейса IDocumentDBService
using System.Threading.Tasks;
using XamFormStudCos.Model;
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
using System.Diagnostics;
class DocumentDBService: IDocumentDBService {
public List < StudentDetail > Items {
get;
private set;
}
DocumentClient client;
Uri collectionLink;
public DocumentDBService() {
client = new DocumentClient(new Uri(Connection.EndpointUri), Connection.PrimaryKey);
collectionLink = UriFactory.CreateDocumentCollectionUri(Connection.DatabaseName,
Connection.CollectionName);} public async Task CreateDatabaseAsync (string databaseName) {
try {
await client.CreateDatabaseIfNotExistsAsync (новая база данных {
Id = databaseName
});
} catch (DocumentClientException ex) {
Debug.WriteLine ("Ошибка:", ex.Message);
}} общедоступная асинхронная задача CreateDocumentCollectionAsync (строка databaseName, строка collectionName) {
try {
await client.CreateDocumentCollectionIfNotExistsAsync (UriFactory.Create.DatabaseName), новая DocumentCollection {
Id = collectionName
}, новые RequestOptions {
OfferThroughput = 400
});
} перехват (DocumentClientException ex) {
Debug.WriteLine («Ошибка:», ex.Message);
}} общедоступная асинхронная задача DeleteStudentAsync (идентификатор строки) {
try {
await client.DeleteDocumentAsync (UriFactory.CreateDocumentUri (Connection.DatabaseName, Connection.CollectionName, id)));
} catch (DocumentClientException ex) {
Debug.WriteLine("Error: ", ex.Message);
}
}
async Task DeleteDocumentCollection() {
try {
await client.DeleteDocumentCollectionAsync(collectionLink);
} catch (DocumentClientException ex) {
Debug.WriteLine("Error: ", ex.Message);
}
}
async Task DeleteDatabase() {
try {
await client.DeleteDatabaseAsync(UriFactory.CreateDatabaseUri(Connection.DatabaseName));
} catch (DocumentClientException ex) {
Debug.WriteLine("Error: ", ex.Message);
}
}
public async Task < List < StudentDetail >> GetStudentAsync() {
Items = new List < StudentDetail > ();
try {
var query = client.CreateDocumentQuery < StudentDetail > (collectionLink).AsDocumentQuery();
while (query.HasMoreResults) {
Items.AddRange(await query.ExecuteNextAsync < StudentDetail > ());
}
} catch (DocumentClientException ex) {
Debug.WriteLine("Error: ", ex.Message);
}
return Items;
}
public async Task SaveStudentDetailAsync(StudentDetail student, bool isNewItem) {
try {
if (isNewItem) {
await client.CreateDocumentAsync(collectionLink, student);
} else {
await client.ReplaceDocumentAsync(UriFactory.CreateDocumentUri(Connection.DatabaseName,
Connection.CollectionName, student.Id), student);
}
} catch (DocumentClientException ex) {
Debug.WriteLine ("Error:", ex.Message);
}
}
} Добавить класс StudentDetailManager.
using System.Threading.Tasks;
using XamFormStudCos.Model;
using XamFormStudCos.Controller;
public class StudentDetailManager {
IDocumentDBService documentDBService;
public StudentDetailManager(IDocumentDBService service) {
documentDBService = service;
}
public Task CreateDatabase(string databaseName) {
return documentDBService.CreateDatabaseAsync(databaseName);
}
public Task CreateDocumentCollection(string databaseName, string collectionName) {
return documentDBService.CreateDocumentCollectionAsync(databaseName,
collectionName);
}
публичная задача > GetStoreInfoAsync () {
return documentDBService.GetStoreInfoAsync ();
}
общедоступная задача SaveStudentDetailAsync (StudentDetail student, bool isNewItem = false) {
return documentDBService.SaveStudentDetailAsync (student, isNewItem);
}
public Task DeleteStudentAsync (StudentDetail student) {
вернуть documentDBService.DeleteStudentAsync (student.Id);
}
}
Добавьте следующие пространства имен и код в файл App.xaml.cs.
using XamFormStudCos.Controller;
using XamFormStudCos.View;
public static StudentDetailManager StudentDetailManager {
get;
private set;
}
public App() {
InitializeComponent();
StudentDetailManager = new StudentDetailManager(new DocumentDBService());
MainPage = new NavigationPage(new StudentList());
}
Затем создайте папку просмотра и добавьте страницу Xaml StudentList для просмотра всех списков учащихся.Добавить элемент панели инструментов с помощью элемента «Добавить» и «ListView» для просмотра списка учащихся.
<ContentPage.ToolbarItems>
<ToolbarItem Text="Add" Order="Primary" Clicked="OnItemAdded" /> </ContentPage.ToolbarItems>
<ListView x:Name="SList" ItemSelected="OnItemselected">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Name}" Detail="{Binding Age}" /> </DataTemplate>
</ListView.ItemTemplate>
</ListView>
Добавьте следующие пространства имен и код в StudentList.xaml.cs
using XamFormStudCos.Model;
protected override async void OnAppearing() {
base.OnAppearing();
await App.StudentDetailManager.CreateDatabase(Constants.DatabaseName);
await App.StudentDetailManager.CreateDocumentCollection(Constants.DatabaseName,
Constants.CollectionName);
var data = await App.StudentDetailManager.GetStoreInfoAsync ();
StdList.ItemsSource = data;
}
async void OnItemAdded (отправитель объекта, EventArgs e) {
await Navigation.PushAsync (new StudentDetails (true) {
BindingContext = new StudentDetail {
Id = Guid.NewGuid (). ToString ()
}
});
}
async void OnItemselected (отправитель объекта, SelectedItemChangedEventArgs e) {
if (e.SelectedItem! = null) {
await Navigation.PushAsync (new EditStudent () {
BindingContext = e.SelectedItem as StudentDetail *});
}
}
Добавьте страницу Xaml StudentDetails для добавления новой информации об ученике.
Для добавления нового учащегося, элементов управления Add Label, Entry и Button нажмитеМетод события.
<ContentPage.Content>
<StackLayout Margin="20" VerticalOptions="StartAndExpand">
<Label Text="Name" />
<Entry Text="{Binding Path=Name}" Placeholder="Enter Student Name" />
<Label Text="Age" />
<Entry Text="{Binding Path=Age}" />
<Button Text="Save" Clicked="OnSaveClicked" />
<Button Text="Cancel" Clicked="OnCancelClicked" /> </StackLayout>
</ContentPage.Content>
Добавьте следующие пространства имен и код в StudentDetail.xaml.cs
using XamFormStudCos.Model;
bool isNewItem;
public StudentDetails(bool isNew) {
InitializeComponent();
isNewItem = isNew;
}
async void OnSaveClicked(object sender, EventArgs e) {
var student = (StudentDetail) BindingContext;
await App.StudentDetailManager.SaveStudentDetailAsync(student, isNewItem);
await Navigation.PopAsync();
}
async void OnCancelClicked(object sender, EventArgs e) {
await Navigation.PopAsync();
}
Добавьте страницу EditStudent Xaml для EditStudent (Update, Delete) Detail.
Для редактирования учащегося добавьте элементы управления «Метка», «Ввод» и «Кнопка» с помощью метода события щелчка,
<StackLayout Padding="10" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<Grid>
<Label Text="Name" Grid.Row="0" Grid.Column="0" HorizontalOptions="Start" WidthRequest="100" VerticalOptions="Center"
/>
<Button Text="Cancel" HorizontalOptions="FillAndExpand" BackgroundColor="Blue" TextColor="White" Clicked="OnCancelClicked" />
Добавьте следующие пространства имен и код в EditStudent.xaml.cs
using XamFormStudCos.Model;
async void Update_Clicked(object sender, System.EventArgs e) {
var student = (StudentDetail) BindingContext;
await App.StudentDetailManager.SaveStudentDetailAsync(student);
await Navigation.PopAsync();
}
async void OnDeleteClicked(object sender, EventArgs e) {
bool accepted = await DisplayAlert("Confirm", "Are you Sure ?", "Yes", "No");
if (accepted) {
var student = (StudentDetail) BindingContext;
await App.StudentDetailManager.DeleteStudentAsync(student);
await Navigation.PopAsync();
}
}
async void OnCancelClicked(object sender, EventArgs e) {
await Navigation.PopAsync();
}
Сборка и развертывание.
Необходимо проверить конфигурацию или другую логику кода.