質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

1793閲覧

xamarin.formsにてnavigationから戻った時にページの内容を再構築したい

masa246

総合スコア17

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2017/08/16 03:37

xamarinを用いてクロスプラットフォームのアプリを開発中なのですが、navigationでページ遷移した後にまた戻ってきたらページ内容を更新したいのですがどうすれば実現できますでしょうか?
ページ表示の度に最新の情報に更新されるようにしたいです。

OnAppearing()をオーバーライドする方法で解決できそうかと思ったのですが、表示したいページは引数を用いてデータベースを参照し、その内容からページを生成するものなのでOnAppearing()にその引数を渡す方法がわからないので現在困っております。

page1からpage2への部分

c#

1Navigation.PushAsync(new page2(x));

page2はpage1からの引数を必要として生成している

c#

1... 2public class page2 : CarouselPage 3{ 4 public page2(string x2) 5 { 6 Makinig_page2(x2);//この中でpage3へのnavigationも生成しています。 7 ... 8 } 9 10 //表示されたときに実行される関数 11 protected override void OnAppearing() 12 { 13 base.OnAppearing(); 14 //ここでpage2(x)を実行出来ればいいなと思います。 15 } 16 17}

pege2はデータベースから情報を取得しそれに合わせてformを作成しています。
Makinig_page2(x2)のなかで次のページpage3へ飛ぶnavigationがあり、page3はデータベースの内容を編集するformになっています。
page3で編集したデータベースの内容をpage2に戻った時にも反映させたいので表示されるたびにformを再構築しようと考えている次第です。

OnAppearing()を引数を必要としてオーバーライドし、page1からnavigationで呼び出せないものかと考えもしたのですが方法がわからずこちらで質問することに至りました。
この引数を必要としてオーバーライドしたOnAppearing()をnavigationで呼ぶことが可能ならこの方法も教えていただきたいです。

どうかご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

正直他のどういう事を行うかの仕様面が全く不明なので、文章内でくみ取れる範囲です。
制約あれば別途教えてください。

Page2にstringのフィールド変数を作成し、コンストラクタで引数string x2をフィールド値に
格納し、更新処理をOnAppearingメソッド内でフィールド値をつかって作成すればいいのでは
ないでしょうか。

C#

1public class page2 : CarouselPage 2{ 3 protected string _x2; 4 public page2(string x2) 5 { 6 _x2=x2; 7 //page3へのnavigation生成処理 8 } 9 10 //表示されたときに実行される関数 11 protected override void OnAppearing() 12 { 13 base.OnAppearing(); 14 //ここでpage2(x)を実行出来ればいいなと思います。 15 Makinig_page2(_x2); 16 } 17 18}

ナビゲーション・View・ロジック(モデル)は切り分けた方が後々楽です。

DB処理やデータ更新などの処理自体をPage側に渡してあげるほうがいいかと。
ページの見た目(View)の処理、ページで行うデータの処理、データと見た目を繋ぐ処理
とナビゲーションという風に切り分けした方が楽になると思います。
あまり大きくならないアプリならそのへんごっちゃでもいいと思いますが、大きくなったり
することを想定されるならその辺りの切り分け、もしくは、MVVMなどのフレームワーク導入
等を検討してみるのも良いのではないでしょうか。

投稿2017/08/16 04:05

kanimaru

総合スコア1013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masa246

2017/08/16 14:41

早速のご回答ありがとうございます。 説明不足の中適切な回答ありがとうございます。 MVVMの書き方を調べて勉強しようと思います。Viewとロジックの切り分けはわかるのですがナビゲーションとは何でしょうか。Viewとロジックを対応させる処理ということでしょうか? 初歩的なことで申し訳ありません。 フィールド変数を作れることでOnAppearing()による処理に渡された変数を利用することが出来ました。ありがとうございます。 ただ、formが追加ではなく更新されるようにpage2の生成の初めにChildren.Clear()をしているのですが、page3から戻った時にこのChildren.Clear()の部分で「FragmentManager is already executing transactions」というエラーが発生してしまします。どうすればよいのでしょうか? 少し調べたのですが今のところ解決策の候補にも当たっていません。 あと、MVVMの書き方についてなのですが、C#から要素を生成するとx:Nameが指定できないので今のところロジックのみ別で記述してナビゲーションとViewは同時に書いているのですがこれは解決策はあるのでしょうか? どんどん質問を増やしてしまい申し訳ありません。どうかよろしくお願いします。
kanimaru

2017/08/16 22:26

前提として、質問とは異なる質問の場合は質問を切り分けてください。 切り分けないと検索などで引っかからずに、異なる質問に別の誰かが救われる芽をつぶします。 ナビゲーションを切り分けるは語弊がありました。ナビゲーションはPageに紐づいていますが その点をどうにか独立させる方が都合が良いという話です。MVVMでは、ViewModelなどで ナビゲーションを行うような設計をされている方もいます。 MVVMやXamarinを勉強するうえで私が参考にさせていただいてるブログ載せておきます。 もし英語なども大丈夫なら海外のStackOverFlowやXamarin公式のQAなどにもたくさん 情報あります。 参考ブログ: http://blog.okazuki.jp/ http://oxamarin.com/ http://ticktack.hatenablog.jp/ http://ytabuchi.hatenablog.com/ 「FragmentManager is already executing transactions」トランザクション中だってエラーのようです が、andoroidかな…。画面描画処理中にClearを呼んだとかでしょうか。正直、情報が少なすぎて明確な 回答ができません。 >C#から要素を生成するとx:Nameが指定できない そもそも、Name要素が必要な理由が不明です。例えば、Command・CommandParameterなどを利用 してViewModelやModelにMessengerでイベントを通知するなどの手が1つあるでしょう。 >ロジックのみ別で記述してナビゲーションとViewは同時に書いているのですがこれは解決策はあるのでしょうか? アプリの仕様や拡張の方向性上解決すべきであれば解決すべきでしょうし、そうでなければ不要かと 考えます。確かに分けた方が便利という点は指摘しましたが、不要なものを足す必要性はないと思い ます。その辺りを含めてアプリ設計なのではないでしょうか。
masa246

2017/08/17 21:52

丁寧なご回答ありがとうございます。 お教えいただいた内容からもっと自分で調べて勉強します。お手数をおかけしました。 また、質問内容を分けて条件や環境を詳細に記述しまた質問させて頂きたいと思います。 今回は本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問