我正在使用MVVM模式,C#和.NET Framework 4.6.1开发WPF。
我有一个包含UserControl(Control1
)的Window,而UserControl包含另一个UserControl(Control2
)。我选择这种方式而不是使用对话窗口(Control2
充当对话窗口)。
两个用户控件都有一个Viewmodel(Control1VM
和Control2VM
)。
我使用Control2
作为表单,让用户输入启动应用程序所需的一些数据。
这是带有Control1
的MainWindow:
这是Control2
超过Control1
。
我的问题是,当我点击“确定”或“取消”按钮时,我不知道如何隐藏Control2
。
这是Control2
上设置Control1
的方式:
<Grid x:Name="gridControl2" Margin="30" Grid.RowSpan="6" Grid.ColumnSpan="3" Visibility="{Binding GridControl2Visibility}">
<local:Control2 x:Name="userControlControl2" />
</Grid>
在Control2
中显示GridControl2Visibility
并将Visible
设为Control1VM
:
public Visibility GridControl2Visibility
{
get { return gridControl2Visibility; }
set
{
if (gridControl2Visibility != value)
{
gridControl2Visibility = value;
RaisePropertyChangedEvent("GridControl2Visibility");
}
}
}
当我点击Control2
中的确定或取消按钮时,如何隐藏Control2
?我的问题是GridControl2Visibility
位于Control1VM
,我无法从Control2VM
访问该类。
答案 0 :(得分:1)
使用两个视图模型都可以访问的服务,并存储Control2
是否应该可见的信息。理想情况下,服务将使用您的di-container注册为singleton并注入视图模型。
或者,您可以使用事件聚合器,它基本上也是一个单例服务,但专注于分发事件而不是保持状态。
答案 1 :(得分:0)
您可以使用事件,您可以从Control2VM引发事件并将其置于Control1VM中并将GridControl2Visibility设置为false。