2017-08-30 11 views
1

構造:Xamarin.Formsインターネット接続の表示方法が変更されましたか?私のアプリの

public partial class App : Application 
    { 

    public App() 
    { 
     InitializeComponent(); 

     MainPage = new MdpMainPage(); 
    } 

MdpMainPageはMasterDetailPageです:

<MasterDetailPage.Detail> 
    <NavigationPage> 
     <x:Arguments> 
      <pages:HomePage /> 
     </x:Arguments> 
    </NavigationPage> 
</MasterDetailPage.Detail> 

私のホームページはCarouselPageであり、それはタイプContentPageの3つのページが含まれています。

<CarouselPage> 
    ...some namespaces... 
    <CarouselPage.Children> 
     <pages:HomePageA /> 
     <pages:HomePageB /> 
     <pages:HomePageC /> 
    </CarouselPage.Children> 
</CarouselPage> 

私は、インターネット接続の変更をWATCHにJamesMontemagnoのConnectivityPluginを使用したいと思います。アプリケーションがを開始すると

DisplayAlertボックスがをポップアップする必要があり、それが私たちに教えてください、次のいずれか

DisplayAlert("Internet connection found.", "Wait for the application data to update.", "OK"); 
...か...

DisplayAlert("No internet connection found.", "Application data may not be up to date. Connect to a working network.", "OK"); 


た場合アプリケーションの開始時にはのインターネット接続があり、PP、別のメッセージボックスが言ってポップアップ表示する必要がありますがは、アプリケーションの開始でインターネットに接続していないと何とか以降のデバイスが正常にを接続するには、まず言及したメッセージボックス場合

DisplayAlert("Internet connection lost.", "Application data may not be up to date. Connect to a working network.", "OK"); 


をすべきです表示されます。

DisplayAlert("Internet connection found.", "Wait for the application data to update.", "OK"); 


私は提供の助けを借りて、正しい実装を把握しようとしましたDocumentation
残念ながら、James Montemagnoはを詳しく説明していません ConnectivityPluginの使い方は、初心者の方が混乱する傾向があります。

/// <summary> 
/// Event handler when connection changes 
/// </summary> 
event ConnectivityChangedEventHandler ConnectivityChanged; 


public class ConnectivityChangedEventArgs : EventArgs 
{ 
    public bool IsConnected { get; set; } 
} 

public delegate void ConnectivityChangedEventHandler(object sender, ConnectivityChangedEventArgs e); 

CrossConnectivity.Current.ConnectivityChanged += async (sender, args) => 
{ 
    Debug.WriteLine($"Connectivity changed to {args.IsConnected}"); 
}; 

を...しかし、私は彼らをどこに置くか分からない

は、私は、次のコードスニペットを使用する必要があります知っています。

私は2つの組み合わせを試しましたが、これまでのところ役に立たないものです。

App.xamlにはいくつか、MasterDetailPageにはいくつか入れていますか?

詳細ページの1つではなく、

詳細ページのどれですか?

私はグーグルではなかったとは思わないでください。私がやったから、皆さんは基本的なモンテマノーニョのレシピを味わう方法について、違う意見があるようです。これは非常に混乱しています。

誰かがこれを実装する最もシンプルでクリーンな方法を提供できますか?実際には何もありません。ユーザーに接続性の変化を知らせるメッセージボックスだけです。

助けていただければ幸いです。
ありがとうございます。

答えて

2

アプリケーションに12ページあるとします。それらのすべてにコネクティビティコードを持つことは意味がありません。イベントを購読するより良い場所は OnStartメソッドの中にあります(コンストラクタ内にもあります)。これは私がプロジェクトのいずれかに持っているものです。

protected override void OnStart() 
{ 
    CrossConnectivity.Current.ConnectivityChanged += (sender, args) => 
    { 
     MessagingService.Current.SendMessage("connectivityChanged", args.IsConnected); 
    }; 
} 

MessagingServiceはジェームズMontemagnoのXamarin.Forms Toolkitのですが、あなたはまた、XamarinのMessaging Centerを使用することができます。

次に、このようにそれをサブスクライブします接続変更のこのメッセージにサブスクライブしたいそれらのページのそれぞれのViewModelに:

MessagingService.Current.Subscribe ("connectivityChanged", async (e) => 
{ 
    //Show a dialog or something to inform about the connectivity change. 
}); 

この方法で、あなたはすべてが切り離されています。


編集:私はちょうどあなたがおそらくページの背後にあるコードから警告を表示するために探している気づきました。あなたは、単にこのようなあなたのMasterDetailPage上のイベントをサブスクライブすることができます:

public class MainPageCS : MasterDetailPage 
{ 
    public MainPageCS() 
    { 
     MessagingService.Current.Subscribe<bool>("connectivityChanged", (args, connected) => 
     { 
      if (connected) 
       DisplayAlert("Internet connection found.", "Wait for the application data to update.", "OK"); 
      else 
       DisplayAlert("Internet connection lost.", "Application data may not be up to date. Connect to a working network.", "OK"); 
     }); 
    } 
} 

いつでも接続の変更を、あなたのApp.xaml.csは、イベントを処理し、反応MasterDetailPageによって受信されMessagingServiceにメッセージを送信しますそれに。

編集2:App.xaml.csにこれを入れて、アプリの起動時にのみ接続がチェックされるようにします。

protected override void OnStart() 
{ 
    Device.BeginInvokeOnMainThread(async() => 
    { 
     var isConnected = CrossConnectivity.Current.IsConnected; 

     await MainPage.DisplayAlert("Connection", $"Connected {isConnected}", "OK"); 
    }); 
} 
+0

私はMontemagno's Toolkitをダウンロードしました。最初のスニペットをApp.xaml.csにOnStartメソッドに入れました。 3番目のスニペットをMdpMainPage.xaml.csに入れます(途中でバーガーメニューとしても機能します)。私は奇妙なエラーが発生しています - e.IsConnectedに赤い波線が下線付きです - IMessagingサービスにはIsConnected ...などの定義が含まれていません。何か案は? – PaxForce

+0

@ PaxForceそれは動作しますか? – hankide

+0

@PaxForce最新の編集を確認してください。 – hankide

関連する問題