【发布时间】:2014-11-18 03:14:10
【问题描述】:
在 MVVM 方式中,我有一个初始窗口打开 (MainView),它的 DataContext(即它的视图模型)是从代码隐藏中初始化的:
XAML:
<Window x:Class="Nova5.UI.Views.MainView" ..............
C# 代码隐藏:
public partial class MainView : Window
{
private MainViewModel vm = new MainViewModel(new WPFMessageBoxService());
public MainView()
{
InitializeComponent();
this.Loaded += (s, e) => { this.DataContext = this.vm; };
}
}
从那里开始,我使用 DialogService 从 UserControls 打开其他窗口:
XAML:
<Window x:Class="Nova5.UI.Views.WindowDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WindowDialog"
WindowStyle="SingleBorderWindow"
WindowStartupLocation="Manual" SizeToContent="WidthAndHeight">
<ContentPresenter x:Name="DialogPresenter" Content="{Binding .}"/>
</Window>
ViewModel 创建 WindowDialog 和关联的 viewmodel 并打开窗口。
一切都好。
现在的问题。假设我有十个用户控件。这些用户控件中的每一个都可以由 DialogService 呈现。这些用户控件中的每一个都可以打开其他用户控件。
我想做的是让 MainWindow 打开 UserControl_1。然后让 UserControl_1 打开 UserControl_2。然后 UserControl_1 需要关闭而 UserControl_2 保持打开状态。当然,UserControl_2 可以打开 UserControl_3,之后 UserControl_2 消失,只剩下 MainWindow 和 UserControl_3。简而言之,每个启动的 UserControl 都需要独立于创建它的控件。
我希望这是可以理解的。
如何做到这一点?感谢您的任何想法或帮助。
【问题讨论】:
-
你想做的是 .Show() 一个新窗口,而不是 .ShowDialog()。所以你应该把你的代码改成 .Show()。
标签: c# wpf xaml mvvm user-controls