2013-07-22 12 views
11

Trong ASP.NET, tôi có thể thực hiện Session["something"] = something; và sau đó tôi có thể truy xuất trang khác giá trị của phiên. Có một phiên trong WPF mà sẽ cho phép tôi làm như vậy trong ASP.NET? Tôi nhận thấy không có phiên trong WPF vì có trạng thái. Bởi vì tôi có nhiều trang kiểm soát người dùng, tôi cần phải nhận được các giá trị của nó và hiển thị nó trên MainWindow.Phiên trong WPF?

Có điều gì tương tự với Phiên trong WPF không?

Một số tài nguyên nói để sử dụng cookie. Làm thế nào để làm điều đó? mỏ Là một ứng dụng WPF không phải là một ứng dụng web WPF?

+2

WPF và Winforms không có loại tư duy dựa trên phiên mà bạn đã quen thuộc trong một ứng dụng ASP. – MarkWalls

Trả lời

14

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn chỉ cần một số loại lưu trữ toàn cầu cho các giá trị nhất định trong chương trình của bạn.

Bạn có thể tạo một lớp tĩnh với các thuộc tính tĩnh công cộng cho các giá trị khác nhau mà bạn cần lưu trữ và có thể truy cập toàn cục bên trong ứng dụng của bạn. Một cái gì đó như:

public static class Global 
{ 
    private string s_sSomeProperty; 

    static Globals() 
    { 
     s_sSomeProperty = ...; 
     ... 
    } 

    public static string SomeProperty 
    { 
     get 
     { 
      return (s_sSomeProperty); 
     } 
     set 
     { 
      s_sSomeProperty = value; 
     } 
    } 

    ... 
} 

Bằng cách này bạn có thể chỉ cần viết Global.SomeProperty bất cứ nơi nào trong mã của bạn nơi mà các lớp Global có sẵn.

Tất nhiên, bạn cần xác thực và - nếu ứng dụng của bạn đa luồng - khóa thích hợp để đảm bảo dữ liệu chung (được chia sẻ) của bạn được bảo vệ qua các chuỗi.

Giải pháp này là tốt hơn so với sử dụng một cái gì đó như phiên vì thuộc tính của bạn sẽ được gõ mạnh mẽ và không có tra cứu dựa trên chuỗi cho giá trị thuộc tính.

+0

Trên thực tế, nếu bạn có một dự án WPF chính, hãy gọi nó là MainApplicationProject, tham chiếu đến một dự án khác, ví dụ AdminModuleProject nó sẽ không hoạt động: Nếu bạn tạo lớp này trong AdminModuleProject, bạn sẽ không thể sử dụng nó trong một dự án khác ModuleProject. Nếu bạn tạo lớp này trong MainApplicationProject, bạn sẽ không thể sử dụng nó trong bất kỳ dự án mô-đun được tham chiếu nào. –

+0

@ G.Dealmeida Tôi xin lỗi, ý bạn là gì? – xxbbcc

4

Một khả năng là để sử dụng:

Application.Current.Resources["something"] = something; 

tôi sẽ không nhận được vào thói quen sử dụng quá thường xuyên mặc dù. Tôi nghĩ rằng nó nói chung cho dữ liệu được lưu trữ một lần (chẳng hạn như phong cách) và sau đó chỉ được tham chiếu từ các điểm khác trong ứng dụng. Mọi thứ trong ứng dụng của bạn đọc/ghi vào một số dữ liệu được chia sẻ chung trên toàn cầu là thực hành kém và có thể làm cho việc gỡ lỗi trở nên khó khăn.

-1

Như bạn có thể đã biết, trong một ứng dụng wpf trên máy tính để bàn, không có thứ gì giống như phiên. Nếu bạn triển khai các tài khoản trong ứng dụng wpf của mình và nếu bạn có thể cung cấp dịch vụ liên tục cho mỗi người dùng, nó sẽ tương tự như phiên. Tôi khuyên bạn nên thử NDatabase, một cơ sở dữ liệu đối tượng nguồn mở rất đơn giản và mạnh mẽ.

http://ndatabase.codeplex.com/

Chúng cũng cung cấp hướng dẫn tốt. Kiểm tra hướng dẫn 1 phút của họ và 5 phút hướng dẫn là tốt.

0

Theo tôi, cách tốt nhất để làm điều đó sẽ được để lưu trữ nó trong các thuộc tính hiện tại của ứng dụng của bạn như thế này:

Application.Current.Properties["stuff"] 

Bạn có thể lưu trữ bất kỳ loại đối tượng, nhưng đừng lạm dụng nó .

Cá nhân tôi sẽ sử dụng loại thủ đoạn chỉ khi tôi không có cách nào khác để chia sẻ dữ liệu (giống lời khuyên hơn Grant Winney)

Tôi thích sử dụng tài nguyên để dịch hoặc hình ảnh và thuộc tính cho lá cờ khác/dữ liệu chỉ để những điều riêng biệt một chút