2009-07-21 24 views
12

Ho creato un'applicazione WPF in C# con 3 finestre diverse, Home.xaml, Name.xaml, Config.xam l. Voglio dichiarare una variabile in Home.xaml.cs che posso usare in entrambe le altre forme. Ho provato a fare public string wt = ""; ma non ha funzionato.Applicazione WPF che utilizza una variabile globale

Come posso renderlo utilizzabile da tutte e tre le forme?

risposta

11

è possibile utilizzare una proprietà statica:

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

Edit:

L'idea è di creare una classe che si tiene tutti i "dati comuni", le configurazioni in genere. Naturalmente, puoi usare qualsiasi classe ma suggerirti di usare una classe statica. È possibile accedere a questa proprietà come questa:

Console.Write(ConfigClass.MyProperty) 
+0

io non sono sicuro di aver capito ... si può spiegare per favore. Grazie. – Jake

1

Ci sono due cose che si possono fare qui (tra gli altri, questi sono solo i due che mi vengono in mente in primo luogo).

  1. Si potrebbe fare la statica variabile Home.xaml.cs

    stringa statica pubblica Foo = "";

  2. Si può semplicemente passare la variabile a tutte e tre le forme.

Vorrei andare con il n. 2, me stesso, e se necessario creare una classe separata contenente i dati di cui ho bisogno. Quindi ogni classe avrebbe accesso ai dati.

+0

Ma voglio aggiungere un valore alla variabile in home e usare quel valore in config. Se dichiaro in tutte le forme il valore viene cancellato. Come posso dichiararlo così posso usarlo continuamente in tutte e tre le forme. – Jake

18

Il modo corretto, soprattutto se vi capitasse di voler passare a XBAPP, è quello di conservarlo in

Application.Current.Properties 

che è un oggetto Dictionary.

+0

Le proprietà non vengono visualizzate come membro di Application.Current, c'è qualcosa di speciale da fare per accedervi? EDIT: mi è appena venuto in mente che ciò potrebbe essere dovuto al fatto che sto facendo un'applicazione per Windows Phone, quindi potrei avere librerie leggermente diverse. –

+2

monaco @dr: Win Phone (7) significa SilverLight, questa risposta riguardava WPF. –

10

Per evitare di dover passare attorno a valori tra Windows e usercontrols, o la creazione di una classe statica per duplicare funzionalità esistenti all'interno di WPF, è possibile utilizzare:

  • impostazione: App.Current.Properties["NameOfProperty"] = 5;
  • ottenere: string myProperty = App.Current.Properties["NameOfProperty"];

Questo è stato menzionato sopra, ma la sintassi è stata un po 'spenta.

Fornisce variabili globali all'interno dell'applicazione, accessibili da qualsiasi codice in esecuzione al suo interno.

+0

e se fosse necessario salvare gli oggetti di classe? funzionerà allo stesso modo? –

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> 

codice dietro

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