2010-04-12 51 views
8

Tôi nhận thấy rằng nhiều khung công tác MVFM của WPF dường như tránh sử dụng các điều khiển NavigationWindow và Page có lợi cho việc soạn các trang bằng cách sử dụng các UserContrested lồng nhau.Khi nào tôi nên sử dụng UserControl thay vì Trang?

NavigationWindow và Page cung cấp các cách dễ dàng để bật điều hướng quay lại và chuyển tiếp trong tạp chí cũng như cung cấp cách dễ dàng để chuyển dữ liệu giữa các trang. Hầu hết các khung MVVM tôi đã thấy triển khai lại các tính năng này theo nhiều cách khác nhau.

Có lý do cụ thể nào để tránh sử dụng NavigationWindow và Trang không?

Trả lời

10

"NavigationWindow không lưu trữ một thể hiện của một đối tượng nội dung trong lịch sử hàng hải. Thay vào đó, NavigationWindow tạo ra một thể hiện mới của các đối tượng nội dung mỗi thời điểm được chuyển đến bằng cách sử dụng lịch sử hàng hải. Đây hành vi là được thiết kế để tránh bộ nhớ quá mức mức tiêu thụ khi số lượng lớn và một lượng lớn nội dung đang được chuyển đến .Điều này không được ghi nhớ từ của nội dung không được ghi nhớ từ một điều hướng tiếp theo. bao giờ hết, WPF cung cấp một số kỹ thuật bởi mà bạn có thể lưu trữ một phần của nhà nước cho một phần nội dung trong hướng lịch sử ...."

http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationwindow.aspx

+2

Bắt tốt.Vì vậy, có lẽ các lớp NavigationWindow và Page có chút ít liên quan đến một ứng dụng kinh doanh điển hình. Mặc dù nó vẫn làm tôi ngạc nhiên rằng rất nhiều khung MVVM tránh chúng hoàn toàn. – dthrasher

1

Vâng, bạn vẫn sẽ sử dụng usercontrols để tạo các thành phần phụ có thể tái sử dụng, nhưng đối với kiến ​​trúc ứng dụng, nó đi xuống để sử dụng trường hợp thực sự. Nếu bạn đang xây dựng một ứng dụng web điển hình, một Ứng dụng Doanh nghiệp/Điều hướng sẽ ổn. Nếu bạn đang viết một trò chơi, không quá nhiều. Tương tự như vậy nếu bạn đang làm một cái gì đó giống như một quảng cáo tương tác hoặc máy nghe nhạc phương tiện truyền thông.

2

tôi chỉ tìm thấy một số thông tin thú vị khác liên quan đến WPF NavigationWindow và Page trên trang web của Paul Stovell.

Ông có này để nói về lớp NavigationWindow:

WPF bao gồm một lớp được gọi là NavigationWindow, mà bản chất là một cửa sổ mà cũng tăng gấp đôi như một Frame, bằng cách thực hiện hầu hết các giao diện tương tự. Nghe có vẻ hữu ích lúc đầu, nhưng hầu hết thời gian bạn cần kiểm soát nhiều hơn đối với Cửa sổ, vì vậy tôi chưa bao giờ có nhu cầu sử dụng lớp này. Tôi chỉ chỉ ra nó vì lợi ích của sự hoàn chỉnh, mặc dù mileage của bạn có thể khác nhau.

Xem bài viết chuyên sâu của mình trên WPF NavigationMagellan and WPF Page management issues mà anh gặp phải khi viết khuôn khổ WPF Magellan của mình.

3

Tôi vừa phát hiện ra sự khác biệt giữa UserControls và Pages: Trang không thể được sử dụng làm DataTemplates.

Ví dụ, nếu bạn đã tạo ra ứng dụng bằng cách sử dụng phong cách MVVM, bạn có thể mong đợi điều này để làm việc:

<DataTemplate DataType="{x:Type ViewModels:ProjectDashboardViewModel}"> 
     <Views:ProjectDashboardView /> 
    </DataTemplate> 

Nhưng nếu ProjectDashboardView là một trang, nó sẽ thất bại.

+0

Trong trường hợp này, bạn sẽ muốn trang của bạn chấp nhận một mô hình khung nhìn trong hàm dựng hoặc tạo nó từ các dữ liệu khác. Nói chung, việc triển khai MVVM sẽ muốn sử dụng PageFunction . Bên trong trang của bạn, bạn có thể có một người trình bày nội dung có chứa mô hình khung nhìn. Trang là thành phần cấp cao nhất. Hãy thử nghĩ về nó như một cửa sổ nội tuyến. – Gusdor

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