我一直在关注这种模式。 http://www.codeproject.com/Articles/36745/Showing-Dialogs-When-Using-the-MVVM-Pattern
但是,在此示例中,在PersonDialog.xaml.cs类中,我无法访问this.DataContext。它始终为空。由于我使用DialogService打开一个窗口(我将DataContext设置为ViewModel,并将数据从MainWindowViewModel传递给PersonDialogViewModel)我需要ViewModel的实例。我将无法从View创建另一个PersonDialogViewModel。
请建议我需要在后面的代码中从ViewModel访问数据。
这是代码。
//MainWindowViewModel.cs
PersonViewModel selectedPerson = persons.Single(p => p.IsSelected);
PersonDialogViewModel personDialogViewModel = new PersonDialogViewModel(selectedPerson.Person);
dialogService.ShowDialog<PersonDialog>(this, personDialogViewModel);
//In PersonDialogViewModel.cs
public PersonDialog()
{
InitializeComponent();
var obj = this.DataContext;//DataContext is always null.
}
答案 0 :(得分:1)
在你的XAML中,对话框本身会有一个Loaded事件,例如
<UserControl
x:Class="ClassName"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:D="http://schemas.microsoft.com/expression/blend/2008"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="UserControl_OnLoaded"
Mc:Ignorable="D">
这个“UserControl_OnLoaded”事件处理程序将是你代码中的一个方法。如果你执行
var obj = this.DataContext;
此时,将设置数据上下文。构造函数是构造PersonDialog的点,而不是当对话服务将DataContext绑定到它时。