2009-07-21 23 views
12

Utworzono aplikację WPF w języku C# z 3 różnymi oknami, Home.xaml, Name.xaml, Config.xam l. Chcę zadeklarować zmienną w Home.xaml.cs, którą mogę użyć w obu pozostałych formach. Próbowałem wykonać public string wt = "";, ale to nie zadziałało.Aplikacja WPF używająca zmiennej globalnej

Jak mogę sprawić, aby był on dostępny we wszystkich trzech formach?

Odpowiedz

11

Można użyć właściwości statycznych:

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

Edit:

Idea jest utworzyć klasy, które przechowuje wszystkie dane "wspólną", zazwyczaj konfiguracjach. Oczywiście możesz użyć dowolnej klasy, ale sugerujesz użycie klasy statycznej. Można uzyskać dostęp do tej właściwości tak:

Console.Write(ConfigClass.MyProperty) 
+0

Nie jestem pewien, czy rozumiem ... można wyjaśnić proszę. Dziękuję Ci. – Jake

1

Istnieją dwie różne rzeczy można zrobić tutaj (między innymi; są to tylko dwa, które przychodzą na myśl pierwsze).

  1. Można zrobić zmiennej statycznej na Home.xaml.cs

    public static ciąg Foo = "";

  2. Można po prostu przekazać zmienną do wszystkich trzech formularzy.

Chciałbym iść z # 2, osobiście, aw razie potrzeby utworzyć osobną klasę, która zawiera potrzebne dane. Wtedy każda klasa miałaby dostęp do danych.

+0

Ale chcę dodać wartość do zmiennej w domu i użyć tej wartości w config. Jeśli deklaruję we wszystkich formularzach, wartość zostanie usunięta. Jak mogę to zgłosić, aby móc korzystać z niego w sposób ciągły we wszystkich trzech formach. – Jake

18

Właściwym sposobem, zwłaszcza jeśli kiedykolwiek chcesz, aby przejść do XBAPP, jest przechowywanie go w

Application.Current.Properties 

który jest słownik przedmiot.

+0

Właściwości nie pojawią się jako członek Application.Current, czy jest coś specjalnego do zrobienia, aby uzyskać do niego dostęp? EDYCJA: przyszło mi do głowy, że może to być spowodowane tym, że robię aplikację Windows Phone, więc mogę mieć nieco inne biblioteki. –

+2

@dr monk: Win Phone (7) oznacza SilverLight, ta odpowiedź dotyczyła WPF. –

10

Aby uniknąć konieczności przechodzenia wokół wartości pomiędzy oknami i usercontrols lub tworząc klasę statyczną powielić istniejącą funkcjonalność w WPF, można użyć:

  • ustawienie: App.Current.Properties["NameOfProperty"] = 5;
  • się: string myProperty = App.Current.Properties["NameOfProperty"];

Zostało to wspomniane powyżej, ale składnia była trochę wyłączona.

Zapewnia to zmienne globalne w aplikacji, dostępne z dowolnego działającego w nim kodu.

+0

co, jeśli musimy zapisać obiekty klasy? czy to działa tak samo? –

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> 

kod za

Application.Current.FindResource("strApp").ToString() 
Powiązane problemy