Có hai cách tôi có thể nghĩ để làm điều này một cách dễ dàng
Đầu tiên sẽ được sử dụng một Popup
thay vì một mới Window
. Ví dụ: tôi thường đặt các thuộc tính trong ViewModel
của mình cho PopupContent
và IsPopupVisible
và đặt các giá trị đó bất kỳ lúc nào tôi muốn hiển thị điều khiển Popup
của mình. Ví dụ, một lệnh ShowAboutPopup
rơle có thể chạy một cái gì đó như thế này:
void ShowAboutPopup()
{
PopupContent = new AboutViewModel();
IsPopupVisible = true;
}
Bạn có thể hiển thị nó sử dụng một đối tượng Popup
, hoặc tùy chỉnh UserControl
. Tôi thích sử dụng riêng custom Popup UserControl của tôi, mà thường sẽ kết thúc như thế này:
<Window>
<Canvas x:Name="RootPanel">
<SomePanel>
<!-- Regular content goes here -->
</SomePanel>
<local:PopupPanel Content="{Binding PopupContent}"
local:PopupPanel.IsPopupVisible="{Binding IsPopupVisible}"
local:PopupPanel.PopupParent="{Binding ElementName=RootPanel}" />
</Canvas>
</Window>
Thuộc tính PopupContent
là một ViewModel
(chẳng hạn như một AboutViewModel
), và DataTemplates
được sử dụng để nói với WPF để vẽ cụ thể ViewModels
với cụ Views
<Window.Resources>
<DataTemplate DataType="{x:Type local:AboutViewModel}">
<local:AboutView />
</DataTemplate>
</Window.Resources>
phương pháp khác là phải có một số loại ApplicationViewModel
chạy khi khởi động, và chịu trách nhiệm về trạng thái ứng dụng tổng thể, trong đó bao gồm mà cửa sổ (s) được mở.
Thông thường tôi thích có một đơn ApplicationView
có chứa một ContentControl
để hiển thị các trang hiện
<Window>
<ContentControl Content="{Binding CurrentViewModel}" />
</Window>
tuy nhiên nó cũng có thể được sử dụng để quản lý nhiều cửa sổ. Nếu bạn sử dụng nó để quản lý nhiều đối tượng Window
, hãy cảnh báo rằng đây sẽ không phải là ViewModel
thuần túy bởi vì nó sẽ cần truy cập vào một số đối tượng cụ thể cho xem và tham chiếu đối tượng giao diện người dùng không phải là một cái gì đó ViewModel
. Ví dụ, nó có thể đăng ký để nhận được thông báo ShowWindow
và khi nhận được những tin nhắn đó, nó sẽ tạo Chế độ xem được chỉ định và hiển thị nó, đồng thời có thể ẩn cửa sổ hiện tại.
Cá nhân, tôi cố gắng tránh nhiều cửa sổ nhiều nhất có thể. Phương pháp thông thường của tôi là có một Chế độ xem duy nhất chứa các đối tượng ứng dụng nhất quán cho bất kỳ trang nào và một số nội dung động có thay đổi là ContentControl
. Tôi có một số example using this navigation style on my blog nếu bạn quan tâm
Một số mã của bạn sẽ cực kỳ hữu ích để tìm câu trả lời ... – EtherDragon