如何使用 WPF 和 MVVM 模式将数据从窗口获取到另一个窗口
本文关键字:窗口 获取 另一个 数据 WPF 何使用 MVVM 模式 | 更新日期: 2023-09-27 18:35:54
我构建了一个小任务应用程序,在我的第一个窗口中,我有一个我的任务列表,当我单击"创建"按钮时,它会打开带有文本框的新窗口,为新任务编写标题和内容。
我需要的是获取标题和内容写入我的第一个窗口的第二个窗口,以将这个新任务添加到我的列表中。
我的代码看起来像这样:
主视图模型 :
public class MainViewModel : Notifyer
{
ObservableCollection<Task> mTasks;
public ObservableCollection<Task> Tasks { get { return this.mTasks; } set { this.mTasks = value; Notify("Tasks"); } }
private ICommand m_ButtonAddCommand;
public ICommand ButtonAddCommand { get { return m_ButtonAddCommand; } set { m_ButtonAddCommand = value; } }
private ICommand m_ButtonDeleteCommand;
public ICommand ButtonDeleteCommand { get { return m_ButtonDeleteCommand; } set { m_ButtonDeleteCommand = value; } }
public MainViewModel()
{
ButtonAddCommand = new CommandHandler(() => add_task(), true);
ButtonDeleteCommand = new CommandHandler(() => delete_task(), true);
mTasks = new ObservableCollection<Task>();
mTasks.Add(new Task("title1", "content1", true));
mTasks.Add(new Task("title2", "content2", false));
}
private void add_task()
{
NewTaskWindow w = new NewTaskWindow();
w.Show();
//how to get my content ???
}
private void delete_task()
{
}
}
和新任务视图模型:
public class NewTaskViewModel : Notifyer
{
private ICommand m_ButtonAddCommand;
public ICommand ButtonAddCommand { get { return m_ButtonAddCommand; } set { m_ButtonAddCommand = value; } }
private String title;
public String Title { get { return this.title; } set { this.title = value; Notify("Title"); } }
private String content;
public String Content { get { return this.content; } set { this.content = value; Notify("Content"); } }
public NewTaskViewModel()
{
ButtonAddCommand = new CommandHandler(() => add_task(), true);
}
private void add_task()
{
Console.WriteLine(Title);
Console.WriteLine(Content);
}
}
您不应该在视图内创建窗口,而应该使用依赖注入。要解决您的问题,请尝试以下操作:
private void add_task()
{
NewTaskWindow w = new NewTaskWindow();
var taskViewModel = ( NewTaskViewModel )w.DataContext;
var title = taskViewModel.Title;
var content = taskViewModel.Content;
w.Show();
}
无需任何注入即可将模型传递到窗口中。没有必要。
WindowModel windowModel = new WindowModel();
Window window = new Window(windowModel);
内部窗口类
public Window(windowModel)
{
DataContext = windowModel;
}
不要忘记删除此窗口的模型注入引用。