2013-09-24 38 views
8

Tôi đã nghiên cứu mẫu MVVM và đưa nó vào thực tiễn trong ứng dụng Windows Phone 8 và tôi có câu hỏi về các phương pháp hay nhất để khởi tạo và truy cập ViewModels một ứng dụng.Windows Phone 8 - MVVM ViewModels và App.xaml.cs

Khi tôi tạo ra một databound Application từ mẫu WP8 SDK, tôi nhận thấy mã này trong App.xaml.cs file:

public static MainViewModel ViewModel 
{ 
    get 
    { 
     // Delay creation of the view model until necessary 
     if (viewModel == null) 
      viewModel = new MainViewModel(); 

      return viewModel; 
    } 
} 

private void Application_Activated(object sender, ActivatedEventArgs e) 
{ 
    // Ensure that application state is restored appropriately 
    if (!App.ViewModel.IsDataLoaded) 
    { 
     App.ViewModel.LoadData(); 
    } 
} 

Từ những gì tôi hiểu, đó có nghĩa là các Ứng dụng lớp chứa MainViewModel là thành viên tĩnh và khi ứng dụng được kích hoạt, ViewModel được tải.

Đó là trường hợp, tôi đã các câu hỏi sau:

  1. Nếu App của tôi có một số ViewModels, sẽ tất cả chúng được lưu trữ như các thành viên bên trong App.xaml.cs tập tin?

  2. Nếu mọi dữ liệu của ViewModel được tải cùng một lúc, làm cách nào để quản lý bộ nhớ của ứng dụng? Có thể dỡ bỏ từng dữ liệu của ViewModel và chỉ tải ViewModel đang được View của tôi sử dụng không?

Trả lời

9

Có nhiều cách tiếp cận khác nhau để khởi tạo ViewModels. Một số người trong số họ sẽ khởi tạo tất cả khi khởi chạy, trong khi một số khác không khởi tạo ViewModel cho đến khi nó là cần thiết.

Trong bài viết trên blog sau đây bạn sẽ tìm thấy một số phương pháp có thể để nhanh chóng một ViewModel:

MVVM Instantiation Approaches

Trả lời câu hỏi của bạn; 1.- Theo cách tiếp cận của bạn, bạn sẽ phải xác định thành viên cho tất cả các Chế độ xem của mình trong tệp App.xaml.cs của bạn. 2.- Bạn có thể làm theo một cách tiếp cận không khởi tạo ViewModel cho đến khi nó là cần thiết.

Có một số bộ công cụ, chẳng hạn như MVVM Light hoặc Caliburn Micro, giúp dễ dàng triển khai mẫu MVVM. Cá nhân tôi sử dụng MVVM Light Toolkit, sử dụng phương pháp định vị. Sử dụng bộ công cụ này, ViewModels được nạp khi cần thiết theo mặc định, nhưng bạn có thể thiết lập nó để tải một ViewModel cụ thể lúc khởi chạy, có thể hữu ích trong một số kịch bản.

+0

Câu trả lời hay, cảm ơn rất nhiều! Và tham khảo cũng tuyệt vời :) Chỉ cần tự hỏi, nếu tôi đi với phương pháp này, cách tốt nhất để bỏ tải dữ liệu từ ViewModels của tôi là gì nếu tôi không muốn họ chiếm quá nhiều bộ nhớ khi không sử dụng ? – miguelarcilla

+0

Tôi nghĩ rằng một trong những lựa chọn sẽ được thực hiện IDisposable trong ViewModel của bạn và Vứt bỏ nó khi rời khỏi View. – anderZubi

+0

mở rộng câu trả lời của andersZubi, tôi thích tạo một singleton đại diện cho trạng thái hiện tại của ứng dụng và có thuộc tính kiểu Dictionary . Mỗi Trang hoặc điều khiển cần có một kiểu xem, tìm trong từ điển trước, sau đó tạo nó nếu nó chưa tồn tại và thêm viewModel vào từ điển. Sau đó, nếu nó là IDisposable, bạn không phải vứt bỏ nó khi dỡ chế độ xem ... vì bạn có một tham chiếu đến nó, bạn có thể chọn để vứt bỏ nó dựa trên bất kỳ kích hoạt tùy ý nào (ngay cả sau khi xem được dỡ), nếu bạn có "khóa" cho mô hình xem trong từ điển. –

Các vấn đề liên quan