2017-05-01 8 views
0

すべて複数のWPFページでクラスを使用する

wpfを使用してビデオ会議コーデックを制御するためのユーザーインターフェイスを作成しています。この例では、ページだけが必要です。 1つのメインページは、いくつかのショートカットと基本的なコントロールと高度なページです。

私の問題は、私は、メインページでコーデックコントロールクラスをインスタンス化しますが、高度なページではアクセスできません。私は両方のページでコーデックコントロールクラスを利用できるようにする方法を知らない。ここで

は、私がインスタンス化することができるはずと思われるスニペット(私は明確にするための名前空間が含まれていませんでした)

MainWindow.xaml.cs

using CodecControl; 

public partial class MainWindow:Window 
{ 
    Codec codec = new Codec(); 

    public MainWindow(); 
    { 
     InitializeComponent(); 
    } 

    private void btnAdvanced_Click(object sender, RoutedEventArgs e) 
    { 
     _mainframe.NavigationService.Navigate(new Uri("Advanced.xaml",UriKind.Relative)); 
    } 

    //there are various shortcut buttons below here 
} 

AdvancedPage

public partial class AdvancedPage : Page 
{ 
    InitializeComponent(); 
} 

private void btnConnect(object sender, RoutedEventArgs e) 
{ 
    codec.Connect(ipAddress,port); 
} 
//other controls below 

ですクラスは一度同じメインウィンドウのすべての部分になるので、他のページで使用します。私は何が欠けていますか?

ありがとうございました。 Norm

答えて

0

提供されている不完全なコード例に基づいて、直接適用できると思われるメカニズムは1つだけです。上記が機能するために、あなたのAdvancedPageクラスがCodec参照を設定するために使用することができCodecプロパティを必要としていることを

public partial class MainWindow:Window 
{ 
    Codec codec = new Codec(); 

    public MainWindow(); 
    { 
     InitializeComponent(); 
    } 

    private void btnAdvanced_Click(object sender, RoutedEventArgs e) 
    { 
     _mainframe.NavigationService.Navigated += NavigationService_Navigated; 
     _mainframe.NavigationService.Navigate(
      new Uri("Advanced.xaml", UriKind.Relative), codec); 
    } 

    private void NavigationService_Navigated(object sender, NavigationEventArgs e) 
    { 
     ((AdvancedPage)e.Content).Codec = (Codec)e.ExtraData; 
     _mainframe.NavigationService.Navigated -= NavigationService_Navigated; 
    } 

    //there are various shortcut buttons below here 
} 

注:これは、NavigationService.Navigate(Uri, Object)オーバーロードを使用しています。

かもしれない仕事は、あなたが Uriオーバーロードを使用することを選んだ理由に応じて、作成することであることを別の方法 AdvancedPage自分をオブジェクトと Navigate(Object)メソッドにそれを渡します

_mainframe.NavigationService.Navigate(new AdvancedPage(codec)); 
明らか

、あなたがしたいですCodec参照を引数として使用するには、AdvancedPageクラスにコンストラクタを追加する必要があります。

AdvancedPage.Codecプロパティを持つことで上記の2つのハイブリッドを使用できますが、そのオブジェクトに移動する前にローカルで作成したAdvancedPageオブジェクトに割り当てることができます。次に、新しいコンストラクタではなくプロパティを追加するだけです。

あなたのシナリオでは役に立たないと思われる場合は、Minimal, Complete, and Verifiable code exampleが含まれるように質問を改善する必要があります。

関連する問題