2009-07-21 3 views
12

Я создал приложение WPF в C# с тремя различными окнами, Home.xaml, Name.xaml, Config.xam l. Я хочу объявить переменную в Home.xaml.cs, которую я могу использовать в обеих других формах. Я пробовал делать public string wt = "";, но это не сработало.Приложение WPF с использованием глобальной переменной

Как я могу использовать его для всех трех форм?

ответ

11

Вы можете использовать статическое свойство:

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

Edit:

Идеи здесь создать класс, который вы держите все "общие данные", как правило, конфигурацию. Конечно, вы можете использовать любой класс, но предлагаете использовать статический класс. Вы можете получить доступ к этому свойству, как это:

Console.Write(ConfigClass.MyProperty) 
+0

Я не уверен, я понимаю ... Вы можете объяснить, пожалуйста. Спасибо. – Jake

1

Есть две разных вещей, которые вы можете сделать здесь (в том числе, это только два, которые приходят на ум первым).

  1. Вы могли бы сделать переменной статичной на Home.xaml.cs

    общественности статической строки Foo = "";

  2. Вы можете просто передать переменную во все три формы.

Я бы пошел с №2 самостоятельно и при необходимости создавал отдельный класс, содержащий нужные мне данные. Тогда каждый класс будет иметь доступ к данным.

+0

Но я хочу добавить значение к переменной в доме и использовать это значение в config. Если я объявляю во всех формах, значение стирается. Как объявить его, чтобы я мог использовать его непрерывно во всех трех формах. – Jake

18

Правильный путь, особенно если вы хотите, чтобы перейти к XBAPP, чтобы сохранить его в

Application.Current.Properties 

который является словарь объекта.

+0

Свойства не входят в состав Application.Current, есть ли что-то особенное для доступа к нему? EDIT: мне просто пришло в голову, что это может быть связано с тем, что я делаю приложение для Windows Phone, поэтому у меня могут быть несколько разные библиотеки. –

+2

@dr monk: Win Phone (7) означает SilverLight, этот ответ был о WPF. –

10

Чтобы избежать необходимости проходить вокруг значений между окнами и UserControls или создания статического класса, чтобы дублировать существующую функциональность в WPF, вы могли бы использовать:

  • установка: App.Current.Properties["NameOfProperty"] = 5;
  • получать: string myProperty = App.Current.Properties["NameOfProperty"];

Это было упомянуто выше, но синтаксис был немного выключен.

Это обеспечивает глобальные переменные в вашем приложении, доступные из любого кода, запущенного внутри него.

+0

Что делать, если нам нужно сохранить объекты класса? будет работать так же? –

0

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() 
Смежные вопросы