准备好 Dialog ViewModel 绑定,调用 Dialog 并在 MVVM 中从它返回数据

Posted

技术标签:

【中文标题】准备好 Dialog ViewModel 绑定,调用 Dialog 并在 MVVM 中从它返回数据【英文标题】:Make a Dialog ViewModel binding ready, call Dialog and return data from it in MVVM 【发布时间】:2011-04-26 09:47:19 【问题描述】:

您是否看到了一种更好的方法,我可以从 Controller/ViewModel 调用/构造一个对话框,从它返回数据并将 DocumentViewModel 设置为对话框的 DataContext?

问题是我无法在 DocumentDetailWindow 及其所属的 UserControl 中使用 View first 方法,因为我无法在 XAML 中将 Model 设置为 DocumentViewModel 的 Document 属性!

您将如何解决这种情况?使 Dialog 可正确绑定,调用 dialog 并将其中的数据返回到 LessonPlannerController 以便新文档可以保存在数据库中并添加到已绑定的文档 ObservableCollection 中,这样 GUI 就会刷新一个文档。

LessonPlannerController/ViewModel:

private void OnAddDocument()
  
            DocumentDetailWindowaddDocumentWindow = new DocumentDetailWindow();
            DocumentViewModeldocumentViewModel = new DocumentViewModel();

            documentViewModel.Document = new Document();
            documentViewModel.Repository = new LessonPlannerRepository();
            documentViewModel.SaveDocumentDelegate += new Action<Document>(OnSaveDocument);

            addDocumentWindow.DataContext = documentViewModel;          
            addDocumentWindow.ShowDialog();
 

更新:

我什至考虑过不做这个 => documentViewModel.Document = new Document(); 因为当我可以这样做时,为什么我需要在 ViewModel 中的模型:

在现实中这些属性有一个 NotifyPropertyChange... 公共字符串 DocumentName get;set; 公共字符串关键字 get;set;

然后我可以在 DocumentViewModel 中创建一个具有上述属性的 Document 实例,当执行 Save 命令时,然后通过 Callback 将 Document 传递给 LessonPlannerControl 等......当您必须订阅时,View first 似乎不起作用你的事件到一个方法。只有 ViewModel 首先工作。

你怎么看?我应该不使用 ocumentViewModel.Document = new Document();

并在 DocumentViewModel 中创建这两个属性。嗯...但是如果它们已经在文档模型中,为什么要重新创建呢?...

【问题讨论】:

+1 与自己的迷你对话 :) 【参考方案1】:

这些回答你的问题吗? WPF MVVM dialog example 要么 http://www.codeproject.com/KB/architecture/MVVM_Dialogs.aspx

【讨论】:

以上是关于准备好 Dialog ViewModel 绑定,调用 Dialog 并在 MVVM 中从它返回数据的主要内容,如果未能解决你的问题,请参考以下文章

模型更改时刷新 ViewModel 的所有属性的数据绑定的好方法

如何将listview项绑定绑定到页面的Viewmodel?

了解 PDO 准备好的语句和绑定参数

WPF 绑定 tp ViewModel

MySQLi准备好的语句不绑定整数

Xamarin 表单从 listview 绑定到 viewmodel