2012-03-19 8 views
0

MenuItemのクリックイベントがありますMainMenu_Define_Materialという名前のウィンドウを開きます。です。私はtxt_densityと呼ばれるテキストボックスから情報を取得し、私は密度でその情報を保存し、OKボタンがMaterial_btn_OK_Clickクリックイベントを持つ介してメインウィンドウに戻ります。新しいウィンドウを開くときに以前のセッション値をロードする

私の質問は、ウィンドウを開くたびに最後のセッション値を渡すのを避ける方法です。材質?私が欲しい

は、一度密度は、私は私が前のセッションの値を表示したい素材ウィンドウを開くたびに設定されています。そのdensityはから来て、しかし、あなたはdata layerに保持することができますかmodelviewためObjectDataProviderようであるかもしれないものuourデータクラスにそのフィールドを挿入することができ

private void MainMenu_Define_Material(object sender, RoutedEventArgs e) 
{ 
    newWin_material = new Material();    

    newWin_material.btn_OK.Click += new RoutedEventHandler(Material_btn_OK_Click);    

    if (density != -1) 
    { 
     newWin_material.txt_density.Text = density.ToString();    
    } 

    newWin_material.ShowDialog(); 
} 

private void Material_btn_OK_Click(object sender, RoutedEventArgs e) 
{ 
    density = System.Convert.ToSingle(newWin_material.txt_density.Text);  
    newWin_material.Close();    
} 
+0

を試し:'パブリック材料(単一濃度){密度を使用して// INITコントロール} 'ながら' ' –

答えて

1

ない非常に明確。

そこにはさまざまなソルティムがあります。

一般的な共有データストレージを定義し、異なるウィンドウ間で共有するすべての値を保持します。

データクラスを定義します。ここではstaticクラスのstaticメンバーDesnityを使用しました。任意のウィンドウであなたが

DataClass.Density 

希望のように、(読み取り/書き込み)、そのフィールドにアクセスすることができます後

public static class DataClass 
{ 
    public static double Desnsity; 
} 

が、これは明らかです。

+0

フロートdistance'メインウィンドウ内にあるのtxt_densityはMaterialウィンドウにあります。 '密度'のようなインスタンスを共有することは可能ですか?私は参照クラスを利用しましたが、インスタンスのためにそれを見たことはありません。 – Shibli

+0

'denaity'は私が仮定しているいくつかのデータを保持するフィールドで、' double'かもしれません。だから、いくつかの共有データ型にそれを挿入し、あなたのアプリを介してその1つのインスタンスを使用します。 – Tigran

+0

私はMVVMに私を案内します。私は例が必要なので理解できません。あなたが何か他のことについて話しているのであれば、私はいくつかの例や参考資料を教えてください。 – Shibli

0

WPFではセッションという概念はありません。静的変数を作成してこれを行うか、アプリの設定値を作成したり、コンストラクタを介してパラメータを渡したりすることができます。

0

新しい(たとえば、新しいMaterial();)を作成する場合は、ゼロの情報で開始します。それが新しいことです。 ctorの値を渡すと何が問題になりますか?

`Material.xaml.cs`における別のCTOR作成

MainWindow 
{ 
    private newWin_material = new Material(); // just new it ONCE 

    // this may need to be in MainWindow ctor. 
    newWin_material.btn_OK.Click += new RoutedEventHandler(Material_btn_OK_Click); 
関連する問題