我在这个网站上发现了一个很好的解决方案http://www.thesilvermethod.com/Default.aspx?Id=ModalDialogManagerAsimpleapproachtodealingwithmodaldialogsinMVVM
但必须做一些更改才能将其集成到我的代码中。一路上我遇到一些小问题,主要是因为代码的某些部分我没有完全完成。
我是如何将ModalDialogManager绑定到Type IDialogViewModel的MainWindow属性。然后我有一个WindowsManager类来处理在这个属性中放置正确的实例。其中之一是EditDialogViewModel,它将EditableViewModel公开给此DialogManager。我将EditDialog视图设置为此EditDialogViewModel的DataTemplate,但是当我显示它时,新窗口只显示它的一部分。
以下是视图:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="EditDataTemplates.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="7*" />
<RowDefinition Height="2*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<ContentControl Content="{Binding Path=ViewModel}" />
<TextBlock Text="{Binding Path=ViewModel.Error}" />
<UniformGrid Grid.Row="2" Columns="2">
<Button Command="{Binding SaveCommand}" />
<Button Command="{Binding CancelCommand}" />
</UniformGrid>
</Grid>
</UserControl>
但是新的Dialog窗口只显示绑定到EditDialogViewModel的ViewModel属性的ContentControl(它保存正在编辑的ViewModel)。
我的猜测是它与ModelDialogManager中的代码有关:
void Show()
{
if (_window != null) Close();
Window w = new Window();
_window = w;
w.Closing += w_Closing;
w.Owner = GetParentWindow(this);
w.DataContext = this.DataContext;
w.SetBinding(Window.ContentProperty, ""); //This code here does something I don't fully understand
w.Title = Title;
w.Icon = Icon;
w.Height = DialogHeight;
w.Width = DialogWidth;
w.ResizeMode = DialogResizeMode;
w.ShowDialog();
}
他正在应用绑定,但我想这只是第一个被绑定的ContentControl或其他东西。这很棘手。
另一个问题是鼠标在模态对话框中不起作用。我可以选中文本框,但不要点击它们。
有没有办法解决这个或更好的方法来处理WPF中的模态对话框?
修改
好的我会承认的。我是个大白痴。这很简单,我只是看不到它。我已经将UserControl上的高度和宽度设置为固定值,而我仍然在弄乱它是一个窗口。所以实际上它显示了整个事情,只是没有空间。我不知道为什么鼠标在那时不起作用,但现在它完美无缺。