2016-03-24 14 views
0

私はmasterdetailpageとrootpageとして機能するcontentpageを持っています。しかし、私がそれをすると、ログに何かを入力するときに機能しますが、実際に何かを起こさせようとすると、例えばラベルのテキストを変更したり、大きなものを作るなどして動作します。メソッド内のSystem.Diagnostics.Debugが実行されますが。私のコードは次のようになります。パブリックメソッドは "ログ"でのみ実行されますが、ラベル、ボタンなどでは実行されません。

マイmasterdetailpage:

knappen.Clicked += (object sender, EventArgs e) => { 
       var ourStartPage = new StartPage(); 
       ourStartPage.InitThisPage(); 
      } 

そして、これは私がロードされたい私の特定の機能をロードするパブリックメソッドを持つ私のcontentpage(スタートページ)です:

public void InitThisPage() 
    { 
     LoadData(); 
    } 

async void LoadData() 
    { 
     label.TextColor = Color.Red; //so this does not change color 
     System.Diagnostics.Debug.WriteLine ("Does it reach this?"); //but it reaches this and types this out in the log. 
    } 

したがって、上記のそれはログに入力したものに届きますが、ラベルの色は変わりません。私は別のラベル、ボタン、画像などを試しましたが、ログの中で実行するのとは異なり、実行されていないようです。

ここに問題がありますか?

+0

、私はあなたがの2つのインスタンスを持っていることをかなり確信していますStartPage - 実際に画面に表示されるものと、ボタンをクリックした後に作成するもの。一方のプロパティーを更新しても他方のプロパティーは変更されません。 – Jason

+0

私は1つの "StartPage"しか持っていませんが、変数を作成するときに私が到達できる唯一のものです。 StartPageViewModelにもアクセスできます。 – Yannick

+0

1つのStartPageクラスがありますが、複数のインスタンスがあります。単に「新しいStartPage()」を実行しても、それをビジュアル階層に追加することはできず、画面上で見ることができます。 – Jason

答えて

1

は、メインUIスレッド上のラベルの色を更新してみてください。

InvokeOnMainThread (() => { 
    label.TextColor = Color.Red; //so this does not change color 
}); 

は、文献:あなたが過去に投稿したコードに基づいてWorking with the UI Thread

+0

ああ。以前これを聞いたことはありません。このコードを私の "StartPage" akaに入れますか?コンテンツページ?または、どこかのUIスレッドページを持っていますか? – Yannick

+1

あなたは 'InvokeOnMainThread'匿名デリゲートにUIコードを囲み、サンプルコードをカット&ペーストして' label.TextColor = ... 'コードを置き換えて試してみましょう。 Xamarinには多くの開発者がいます。 UIスレッディングに関連する記事ですが、私が答えに入れたリンクから始めます。 – SushiHangover

+0

InvokeOnMainThread私はこれを見つけることができません。私はアセンブリがないと思いますか?フォームで – Yannick

関連する問題