Xamarin Forms with Prism - проблема с использованием WebService - PullRequest
0 голосов
/ 15 сентября 2018

Кто-нибудь может мне помочь?Я просто создал проект Xamarin Forms with Prism i VS2017 на Android (экран).Я использовал Prism Template Pack.Я хотел бы подключить проект с моим WebService. вот ссылка на экран всего проекта У меня есть два проекта PrismCoursApp и PrismCoursApp.Droid.Первый проект содержит SecondPageViewModel.cs, где я пытаюсь использовать подключенный WebService (wsMES), но не могу добавить пространство имен с PrismCoursApp.Droid.Пространство имен проекта PrismCourseApp.Android - это PrismCourseApp.Droid и PrismCourseApp.Android зависит от PrismCourseApp.
Я мог бы добавить ссылку на веб-сервис только в проекте PrismCoursApp.Android, но я хотел бы использовать его в SecondPageViewModel.cs в PrismCourse.1004 *

Может кто-нибудь сказать мне, что я делаю не так?Спасибо

SecondPageViewModel.cs
using Prism.Commands;
using Prism.Mvvm;
using Prism.Navigation;
using System;
using System.Collections.Generic;
using System.Linq;

using PrismCourseApp.Models;
using System.Collections.ObjectModel;

namespace PrismCourseApp.ViewModels
{
    public class SecondPageViewModel : BindableBase, INavigationAware
    {
        //zmienna do WebService 
        //wsMES.WSwitoMES ws = new wsMES.WSwitoMES();

        private string _title;
        public string Title
        {
            get { return _title; }
            set { SetProperty(ref _title, value); }
        }

        private string _UserCode;
        public string UserCode
        {
            get { return _UserCode; }
            set { SetProperty(ref _UserCode, value); }
        }

        private string _LokalizCode;
        public string LokalizCode
        {
            get { return _LokalizCode; }
            set { SetProperty(ref _LokalizCode, value); }
        }

        public SecondPageViewModel()
        {
            UserCode = AppStateTest.User;
            LokalizCode = AppStateTest.CurrentCode;

            Title = "Użytkownik/Lokalizacja";


        }


        public void OnNavigatedFrom(INavigationParameters parameters)
        {

        }

        public void OnNavigatedTo(INavigationParameters parameters)
        {
            if (parameters.ContainsKey("par1"))
            {
                string par1 = (string)parameters["par1"];
                string par2 = (string)parameters["par2"];
            }

        }

        public void OnNavigatingTo(INavigationParameters parameters)
        {

        }
    }
}

SecondPage.axml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             prism:ViewModelLocator.AutowireViewModel="True"
             x:Class="PrismCourseApp.Views.SecondPage"
             BackgroundColor="White"
             Title="{Binding Title}"
             xmlns:b="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"  
             xmlns:c="clr-namespace:PrismCourseApp.Converters;assembly=PrismCourseApp">
    <ContentPage.Resources>
        <ResourceDictionary>
            <!--<c:ItemTappedEventArgsConverter x:Key="itemTappedEventArgsConverter" />-->
        </ResourceDictionary>
    </ContentPage.Resources>

    <StackLayout
        Spacing="20">

        <Label
            Text="Zalogowany użytkownik:"
            TextColor="Gray"/>
        <Label 
            Text="{Binding UserCode}"
            FontSize="Large" 
            HorizontalOptions="Center" 
            VerticalOptions="CenterAndExpand" />

        <Label
            Text="Lokalizacja:"
            TextColor="Gray"/>
        <Label 
            Text="{Binding LokalizCode}"
            FontSize="Large" 
            HorizontalOptions="Center" 
            VerticalOptions="CenterAndExpand" />

        <ListView 
            x:Name="lstView">
            <!--ItemsSource="{Binding MyDatas}">-->
            <!--<ListView.Behaviors>
                <b:EventToCommandBehavior EventName="ItemTapped" 
                                          Command="{Binding ItemTappedCommand}"
                                          EventArgsConverter="{StaticResource itemTappedEventArgsConverter}" />
            </ListView.Behaviors>-->
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextCell Text="{Binding name}" Detail="{Binding comment}" />
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>


    </StackLayout>
</ContentPage>

SecondPage.axml.cs
using Xamarin.Forms;
using PrismCourseApp.Models;
using System.Collections.ObjectModel;

namespace PrismCourseApp.Views
{
    public partial class SecondPage : ContentPage
    {    

        //Elementy do ListView (klasa MyDate w PrismCourseApp)
        private ObservableCollection<MyDate> MyDatas { get; set; }

        public SecondPage()
        {
            InitializeComponent();
            MyDatas = new ObservableCollection<MyDate>();
            lstView.ItemsSource = MyDatas;

            for (int i = 0; i < 30; i++)
            {
                MyDatas.Add(new MyDate
                {
                    name = "Pozycja " + (i+1).ToString(),
                    comment = "Miejsce na szczegóły " + (i+1).ToString()
                });
            }
        }    
    }
}

MainActivity.cs in Android Project
using Android.App;
using Android.Content.PM;
using Android.OS;
using Prism;
using Prism.Ioc;

namespace PrismCourseApp.Droid
{
    [Activity(Label = "PrismCourseApp", Icon = "@drawable/ic_launcher", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);
            LoadApplication(new App(new AndroidInitializer()));
        }
    }

    public class AndroidInitializer : IPlatformInitializer
    {
        public void RegisterTypes(IContainerRegistry container)
        {
            // Register any platform specific implementations

        }
    }
}

1 Ответ

0 голосов
/ 20 сентября 2018

Подводя итоги обсуждения в комментариях выше:

Не следует делать веб-сервис зависимым от чего-то определенного для одной из многих клиентских платформ. Предпочтительно размещать интерфейс службы между сервером и частью клиента, которая совместно используется различными реализациями клиента.

Допустим, у вас есть мобильное приложение для Android и IOS. Затем у вас будет два проекта MyApp.Droid и MyApp.IOS для соответствующих клиентских реализаций. Кроме того, есть проект, на который они оба ссылаются и который (надеюсь) содержит большую часть клиентской логики вашего приложения: MyApp.Logic.

Теперь для сервера: у вас есть проект MyApp.Server, который реализует сервис. Если вам нужно определить интерфейсы для взаимодействия между приложением и службой (приходит на ум WCF), вы определяете проект, на который ссылаются как логика на стороне клиента (MyApp.Logic), так и реализация сервера (MyApp.Server): MyApp.Interface.

MyApp.Droid & MyApp.IOS -ref-> MyApp.Logic -ref-> MyApp.Interface <-ref- <code>MyApp.Server

...