【发布时间】:2016-09-01 18:26:04
【问题描述】:
我正在使用 MVVM 模式、C# 和 .NET Framework 4.6.1 开发 WPF。
我有一个包含 UserControl (Control1) 的窗口,并且该 UserControl 包含另一个 UserControl (Control2)。我选择了这种方式来代替使用对话窗口(@987654327@ 充当对话窗口)。
两个用户控件都有一个 Viewmodel(Control1VM 和 Control2VM)。
我使用Control2 作为表单让用户输入一些我需要启动应用程序的数据。
这是带有Control1的主窗口:
这是Control2 超过Control1。
我的问题是当我点击确定或取消按钮时,我不知道如何隐藏Control2。
这是在Control1 上设置Control2 的方式:
<Grid x:Name="gridControl2" Margin="30" Grid.RowSpan="6" Grid.ColumnSpan="3" Visibility="{Binding GridControl2Visibility}">
<local:Control2 x:Name="userControlControl2" />
</Grid>
在Control1VM中显示Control2并将GridControl2Visibility设置为Visible:
public Visibility GridControl2Visibility
{
get { return gridControl2Visibility; }
set
{
if (gridControl2Visibility != value)
{
gridControl2Visibility = value;
RaisePropertyChangedEvent("GridControl2Visibility");
}
}
}
当我单击Control2 中的确定或取消按钮时,如何隐藏Control2?我的问题是GridControl2Visibility 在Control1VM 上,我无法从Control2VM 访问该类。
【问题讨论】:
-
常用的方法是使用 MVVM 工具包的消息传递功能。
-
也为窗口创建一个虚拟机,并在其中保留子虚拟机的实例。子 VM 将依次由其子 VM 实例组成。这样,您可以从 Window VM 控制整个代码。