问题是,当我使用windowManager.showDialog()函数的第三个参数时,这是设置,我收到的错误消息是找不到我的ViewModel的视图。
var view = Caliburn.Micro.ViewLocator.LocateForModel(MyViewModel, null, null);
dynamic settings = new System.Dynamic.ExpandoObject();
settings.ShowInTaskbar = false;
Caliburn.Micro.ViewModelBinder.Bind(MyViewModel, view, null);
this.windowManager.ShowDialog(MyViewModel, "", settings);
看起来提供设置,View已不复存在。但是当我删除最后两个参数时,事情工作文件。我试过SO和其他论坛,但找不到答案。
感谢您的支持。 伊尔凡
答案 0 :(得分:2)
简短回答:尝试在不指定上下文参数的情况下显示对话框 - 通过利用 C#4.0中引入的Optional Arguments将其保留为默认null
值:
this.windowManager.ShowDialog(MyViewModel, settings: settings);
答案很长:方法WindowManager.ShowDialog()的方式如下:
/// <summary>
/// Shows a modal dialog for the specified model.
/// </summary>
/// <param name="rootModel">The root model.</param>
/// <param name="context">The context.</param>
/// <param name="settings">The optional dialog settings.</param>
public virtual void ShowDialog(object rootModel,
object context = null,
IDictionary<string, object> settings = null)
{
var view = EnsureWindow(rootModel,
ViewLocator.LocateForModel(rootModel, null, context));
ViewModelBinder.Bind(rootModel, view, context);
var haveDisplayName = rootModel as IHaveDisplayName;
if(haveDisplayName != null &&
!ConventionManager.HasBinding(view, ChildWindow.TitleProperty))
{
var binding = new Binding("DisplayName") { Mode = BindingMode.TwoWay };
view.SetBinding(ChildWindow.TitleProperty, binding);
}
ApplySettings(view, settings);
new WindowConductor(rootModel, view);
view.Show();
}
请注意,它会调用EnsureWindow()
并将 context 参数传递给。{如果您将此参数指定为 string.Empty (或“”),它将在Caliburn实现中进一步处理,然后只需null
值来查找相应的View for提供了视图模型。
希望得到这个帮助。