2009-07-21 43 views
12

Tôi đã tạo một ứng dụng WPF trong C# với 3 cửa sổ khác nhau, Home.xaml, Name.xaml, Config.xam l. Tôi muốn khai báo một biến trong Home.xaml.cs mà tôi có thể sử dụng trong cả hai hình thức khác. Tôi đã thử làm public string wt = ""; nhưng điều đó không hiệu quả.Ứng dụng WPF sử dụng biến số toàn cầu

Làm cách nào để tôi có thể sử dụng được cả ba hình thức?

Trả lời

11

Bạn có thể sử dụng một thuộc tính tĩnh:

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

Edit:

Ý tưởng ở đây là tạo ra một lớp mà bạn nắm giữ tất cả "dữ liệu chung", điển hình là cấu hình. Tất nhiên, bạn có thể sử dụng bất kỳ lớp nào nhưng đề nghị bạn sử dụng một lớp tĩnh. Bạn có thể truy cập vào tài sản này như thế này:

Console.Write(ConfigClass.MyProperty) 
+0

Tôi không chắc là tôi hiểu ... bạn có thể giải thích xin vui lòng. Cảm ơn bạn. – Jake

1

Có hai điều khác nhau mà bạn có thể làm ở đây (trong số những người khác, đây là chỉ có hai mà tôi suy nghĩ đầu tiên).

  1. Bạn có thể làm cho các tĩnh biến trên Home.xaml.cs

    công static string Foo = "";

  2. Bạn chỉ có thể chuyển vào biến cho cả ba biểu mẫu.

Tôi sẽ tự làm bằng # 2 và nếu cần thiết, hãy tạo một lớp riêng biệt chứa dữ liệu tôi cần. Sau đó, mỗi lớp sẽ có quyền truy cập vào dữ liệu.

+0

Nhưng tôi muốn thêm một giá trị cho biến trong nhà và sử dụng giá trị đó trong cấu hình. Nếu tôi khai báo trong tất cả các hình thức giá trị sẽ bị xóa. Làm thế nào để tôi tuyên bố nó để tôi có thể sử dụng nó liên tục trong cả ba hình thức. – Jake

18

Cách thích hợp, đặc biệt là nếu bạn đã bao giờ muốn chuyển sang XBAPP, là để lưu trữ nó trong

Application.Current.Properties 

mà là một đối tượng từ điển.

+0

Thuộc tính không phải là thành viên của Application.Current, có điều gì đặc biệt để làm để truy cập nó không? EDIT: nó chỉ xảy ra với tôi rằng điều này có thể là bởi vì tôi đang làm cho một ứng dụng Windows Phone vì vậy tôi có thể có các thư viện hơi khác nhau. –

+2

@dr nhà sư: Win Phone (7) có nghĩa là Silverlight, câu trả lời này là về WPF. –

10

Để tránh phải vượt qua xung quanh các giá trị giữa các cửa sổ và các usercontrol, hoặc tạo ra một lớp tĩnh để trùng lặp chức năng hiện có trong WPF, bạn có thể sử dụng:

  • thiết lập: App.Current.Properties["NameOfProperty"] = 5;
  • nhận: string myProperty = App.Current.Properties["NameOfProperty"];

Điều này đã được đề cập ở trên, nhưng cú pháp hơi lệch.

Điều này cung cấp các biến toàn cục trong ứng dụng của bạn, có thể truy cập từ bất kỳ mã nào đang chạy bên trong nó.

+0

nếu chúng ta cần lưu các đối tượng lớp thì sao? nó sẽ hoạt động theo cùng một cách? –

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> 

mã sau

Application.Current.FindResource("strApp").ToString() 
Các vấn đề liên quan