我想构建一个基于contentcontrol的应用程序。我的目标是拥有一个包含contentcontrol元素的主窗口和几个通过contentcontrol呈现的usercontrol元素。我的问题是:我需要一种方法来显示用户控件并在其中执行操作。在动作执行之后,用户控件应该返回一个值(或类似的值)到包含contentcontrol元素的父窗口,这样我就可以更新contentcontrol的内容。我希望你能理解这个可怕的解释。
下面是一个例子:我有一个包含contentcontrol元素的主窗口。在初始化这个主窗口时,我将contentcontrol的Content属性设置为一个名为“loginview”的新UserControl元素,以便在主窗口中显示loginview。从那里我在loginview中执行操作,如输入用户名和密码。一切都完成后,我点击按钮“登录”,并检查输入的值是否正确与否。当检查成功时,我想告诉主窗口“我完成了”,并设置一个新的内容。因此,当执行操作时,我希望回到主窗口的代码中。
有谁能告诉我怎么才能做到“回归父母”吗?
我试图用Window parentWindow = Window.GetWindow(this.Parent);
获取父元素,但这并不是我真正想要的。
我想要的东西一样,如果用户控件是一个新的窗口,它得到了LoginView window = new LoginView(); window.Show();
调用
在窗口被调用后,我从主窗口返回到代码。
1条答案
按热度按时间j2qf4p5b1#
WPF偏向于MVVM模式。这样你就可以把你的UI分成视图(即,xaml文件)和ViewModels(即cs文件),并使用绑定将视图连接到视图模型。
要使用多个视图,您可以让主视图包含每个子视图,您可以执行以下操作:
MainViewModel.cs:
MainView.xaml:
您可以在LoginViewModel上拥有IsLoggedInProperty
这允许您的MainView绑定到此属性,如
<Button IsEnabled={Binding Login.IsUserLoggedIn>
。请注意,MVVM模式使得处理按钮有点麻烦,因为按钮需要绑定到
ICommand
。一个可能的解决方案是创建一个DelegateCommand,让按钮调用一个方法,而不需要为每个按钮创建一个类。