WPF 将窗口的所有者设置为其父窗口 MVVM

问题描述

假设我有一个应用程序,其中有用户和任务,每个用户都有不同的任务分配给他们。我有一个列出用户的 MainWindow,当您单击用户时,会打开一个 ManageTasksWindow,显示分配给用户的任务,在此 ManageTasksWindow 上,您可以删除、更新和分配任务给该用户。如果我想向用户添加新任务,则单击按钮将打开 AddTaskToUserWindow。我的问题是处理打开这个 AddTaskToUserWindow 的逻辑在一个叫做 TaskLogic 的类中,我不知道如何引用当前打开的 SubWindow,以便我可以将 AddTaskToUserWindow 的 Owner 属性设置为 SubWindow。

我已经试过了:

AddTaskToUserWindow window = new AddTaskToUserWindow();
window.Owner = Application.Current.Windows.OfType<ManageTasksWindow>().First();
window.WindowStartupLocation = WindowStartupLocation.CenterOwner;

但我想要一个解决方案,其中每个 AddTaskToUserWindow 的 Owner 属性都可以设置为相应的 SubWindow。

解决方法

您可以向主窗口(例如 SelectedWindow 或 ActiveWindow)的 ViewModel 添加一个属性,并在您选择用户时设置其值。然后,监听主窗口的 NotifyPropertyChanged,你的 TaskLogic 可以在 ActiveWindow 自动变化时找到它。