web-dev-qa-db-ja.com

グローバル変数を使用するWPFアプリケーション

3つの異なるウィンドウHome.xaml, Name.xaml, Config.xamlを使用して、c#でWPFアプリケーションを作成しました。他の両方の形式で使用できる変数をHome.xaml.csで宣言します。 public string wt = "";を試してみましたが、うまくいきませんでした。

3つのフォームすべてで使用できるようにするにはどうすればよいですか?

16
Jake

適切な方法は、特にXBAPPに移動したい場合は、それを次の場所に保存することです。

Application.Current.Properties

これは、Dictionaryオブジェクトです。

24
Henk Holterman

ウィンドウとユーザーコントロールの間で値を渡したり、静的クラスを作成してWPF内の既存の機能を複製したりする必要がないようにするには、次のようにします。

  • 設定:App.Current.Properties["NameOfProperty"] = 5;
  • 取得: string myProperty = App.Current.Properties["NameOfProperty"];

これについては前述しましたが、構文は少しずれていました。

これにより、アプリケーション内で実行される任意のコードからアクセスできる、アプリケーション内のグローバル変数が提供されます。

16
Dustin Pauze

静的プロパティを使用できます。

public static class ConfigClass()
{
    public static int MyProperty { get; set; }
}

編集:

ここでのアイデアは、すべての「共通データ」、通常は構成を保持するクラスを作成することです。もちろん、任意のクラスを使用できますが、静的クラスを使用することをお勧めします。このプロパティには次のようにアクセスできます。

Console.Write(ConfigClass.MyProperty)
13
Eduardo Cobuci

ここでできることは2つあります(特に、最初に頭に浮かぶのは2つだけです)。

  1. Home.xaml.csで変数を静的にすることができます

    public static string Foo = "";

  2. 変数を3つすべてのフォームに渡すだけです。

私は#2に進み、必要に応じて、必要なデータを含む別のクラスを作成します。次に、各クラスはデータにアクセスできます。

1
Ari Roth

App.xaml:

<Application x:Class="WpfTutorialSamples.App"
         xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
         xmlns:sys="clr-namespace:System;Assembly=mscorlib"
         StartupUri="WPF application/ResourcesFromCodeBehindSample.xaml">
<Application.Resources>
    <sys:String x:Key="strApp">Hello, Application world!</sys:String>
</Application.Resources>

コードビハインド

Application.Current.FindResource("strApp").ToString()
1