2009-05-26 22 views
9

WPF में, जहाँ मैं एक मूल्य जब एक UserControl में फिर बाद में एक और UserControl पहुँच कि फिर से मूल्य में सत्र स्थिति की तरह कुछ वेब प्रोग्रामिंग में बचा सकता है,,, जैसे:मैं WPF में वैश्विक एप्लिकेशन चर कैसे सहेज सकता हूं?

UserControl1.xaml.cs :

Customer customer = new Customer(12334); 
ApplicationState.SetValue("currentCustomer", customer); //PSEUDO-CODE 

UserControl2.xaml.cs:

Customer customer = ApplicationState.GetValue("currentCustomer") as Customer; //PSEUDO-CODE 

उत्तर:

धन्यवाद, बॉब, यहाँ तुम्हारा पर आधारित है, कोड है कि मैं काम करने के लिए मिल गया है:

ApplicationState.SetValue("currentCustomerName", "Jim Smith"); 

एक चर पढ़ने के लिए:

public static class ApplicationState 
{ 
    private static Dictionary<string, object> _values = 
       new Dictionary<string, object>(); 
    public static void SetValue(string key, object value) 
    { 
     if (_values.ContainsKey(key)) 
     { 
      _values.Remove(key); 
     } 
     _values.Add(key, value); 
    } 
    public static T GetValue<T>(string key) 
    { 
     if (_values.ContainsKey(key)) 
     { 
      return (T)_values[key]; 
     } 
     else 
     { 
      return default(T); 
     } 
    } 
} 

एक चर को बचाने के लिए :

MainText.Text = ApplicationState.GetValue<string>("currentCustomerName"); 
+0

लगता आप समझ में नहीं आया कि मैं क्या स्थिर वर्ग का मतलब ... लगता है कि मैं और अधिक अगली बार विस्तृत करना होगा। – CSharpAtl

+0

शब्दकोश थ्रेड-सुरक्षित नहीं है, यदि आप एकाधिक थ्रेड से एप्लिकेशनस्टेट तक पहुंचने की योजना बनाते हैं तो यह एक व्यवहार्य समाधान नहीं होगा। –

+0

@ जे। मिशेल वह ConcurrentDictionary –

उत्तर

9

कुछ इस तरह काम करना चाहिए।

public static class ApplicationState 
{ 
    private static Dictionary<string, object> _values = 
       new Dictionary<string, object>(); 

    public static void SetValue(string key, object value) 
    { 
     _values.Add(key, value); 
    } 

    public static T GetValue<T>(string key) 
    { 
     return (T)_values[key]; 
    } 
} 
+0

का उपयोग कर सकते हैं हम इस कक्षा को लागू करने के लिए कहां जा रहे हैं? और क्या यह कार्यान्वयन थ्रेड सुरक्षित है? – Kalanamith

0

इसे अपने आप को एक स्थिर वर्ग में स्टोर कर सकता है या भंडार जो आप कक्षाओं को इंजेक्ट कर सकते हैं जिन्हें डेटा की आवश्यकता होती है।

2

आप App.xaml.cs फ़ाइल में एक सार्वजनिक स्थैतिक चर का पर्दाफाश कर सकते हैं और फिर कहीं भी अनुप्रयोग वर्ग का उपयोग कर इसे उपयोग ..

12

The Application class पहले से ही इस कार्यक्षमता में बनाया गया है।

// Set an application-scope resource 
Application.Current.Resources["ApplicationScopeResource"] = Brushes.White; 
... 
// Get an application-scope resource 
Brush whiteBrush = (Brush)Application.Current.Resources["ApplicationScopeResource"]; 
संबंधित मुद्दे