2016-06-15 4 views
-2

UWP XAMLページが作成され、プログラムでUserControlを追加してからContentControlに表示されます。プログラムで追加されたUserControl内の親ページからのUWP(XAML/C#)アクセスメソッド

UserControl control = new Views.PlayingGameScreen(); 
this.ContentControl.Content = control; 

私は、UserControlから親ページのメソッドにアクセスする方法が不思議です。

多くのおかげで、UWPと私の小さな経験から Tarran

+0

コンテンツコントロールのコンテンツプロパティをViews.PlayingGameScreenにキャストし、キャストされたオブジェクトのメソッドを呼び出すことができます –

答えて

0

(1つのアプリとカウント:D): あなたはのは、それをPagesGateway.cs

に名前を聞かせて、クラスの静的プロパティであなたのParentPageの参照を保持することができます

静的クラスコード:

public static class PagesGateway 
{ 
public static ParentPage ParentPage {get; set;} 
} 

はその後ParentPage背後にあるあなたのコードでは、参照を設定する必要があります

public partial ParentPage:Page 
    { 
     public PartentPage{ 
     PagesGateway.ParentPage = this; 
    } 

} 

この方法で、ParentPageインスタンスメソッドにアクセスできます。 しかし、そこにはベストプラクティスではない気がします。しかし、私はViewModelsにどこからでもアクセスするためにこれを多く使用していますが、それは完全に機能しますが、ViewModelの再利用性が無効になることを考慮する必要があります。

1

私は最もクリーンな方法は、親が設定するUserControlこのようにそれを行うことにより

public partial class PlayingGameScreen : UserControl 
{ 
    public ICommand Command { get; set; } 

    public void SomeMethod() 
    { 
     this.Command?.Execute(null); 
    } 
} 

//parent code, define the command with the logic to run 
var command = new DelegateCommand(...); 
var control = new Views.PlayingGameScreen 
{ 
    Command = command 
}; 
this.ContentControl.Content = control; 

は、親がコマンドを設定し、ユーザーコントロールをホストしている親であるとUserContolが使用するグローバルなクラスが存在しないかを知る必要はありません。これは完全に分離されたソリューションです。

ボーナスでは、コマンドをDependencyPropertyとして設定し、xamlでも割り当てることができます。コマンドをViewModelにバインドすると、ViewModelがページのViewModelになります。

<uc:PlayingGameScreen Command="{x:Bind SomeCommand}"/> 

私はたくさんの方法を試しましたが、これは私のお気に入りです。

関連する問題