3

我有一个使用 Caliburn.Micro 的 Windows WPF 应用程序。主窗口视图/视图模型由 Caliburn.Micro 处理。其中一个按钮会弹出一个新的对话框窗口,该窗口使用不同的视图-视图模型。

在此对话框中,我有一个容器(列表框和一些过滤器控件),我想将其制成可重用控件,以便可以将其包含在其他对话框中。为此,我从对话框的视图和视图模型中提取了相关代码并创建了一个新视图和视图模型。这一切看起来都不错。

问题是现在回到对话框中,我有一个带有很大空白空间的停靠面板,我需要可重用控件。

从对话框视图模型 OnInitalize() 我可以创建可重用的控件视图模型,但我不知道如何将它的视图放入对话框视图的停靠面板。

要从主窗口视图模型创建对话框,我使用 WindowManager().ShowDialog() 来显示对话框的视图模型,而 Caliburn.Micro 负责设置视图。有没有一种方法可以在对话框的 XAML 中指定我想为可重用控件嵌入视图并让 Caliburn 创建适当的视图/视图模型?

还是我走错了路?

4

1 回答 1

8

如果您的对话框视图模型上有另一个视图模型类型的属性,并且您将 ContentControl 添加到与此属性命名相同的对话框视图中,则 Caliburn.Micro 将自动注入与您的属性视图对应的视图模型类型到 ContentControl 占位符中,并自动将该视图模型类型绑定到视图。你是这个意思吗?就像是:

// Dialog View Model
private MyReusableControlViewModel myReuseableControl;
public MyReusableControlViewModel MyReuseableControl
{ 
   get { return this.myReuseableControl; }
   set { this.myReuseableControl = value;  NotifyOfPropertyChanged(...); }
}

// Dialog View Model Constructor
public DialogViewModel()
{
  this.MyReuseableControl = new MyReusableControlViewModel();
}

// Dialog View
<DockPanel>
  ...
  <ContentControl x:Name="MyReusableControl" />
</DockPanel>

当然,理想情况下,您希望注入对话框视图模型的任何依赖项(在本例中为 MyReusableControlViewModel),并针对对话框视图模型内部的抽象,而不是具体类型。

于 2010-12-10T20:14:35.367 回答