Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 包含两个Caliburn.Micro视图的对话框视图?_C#_Wpf_Mvvm_Caliburn.micro - Fatal编程技术网

C# 包含两个Caliburn.Micro视图的对话框视图?

C# 包含两个Caliburn.Micro视图的对话框视图?,c#,wpf,mvvm,caliburn.micro,C#,Wpf,Mvvm,Caliburn.micro,我有一个使用Caliburn.Micro的Windows WPF应用程序。主窗口视图/视图模型由Caliburn.Micro处理。其中一个按钮弹出一个新的对话框窗口,该窗口使用不同的视图模型 在这个对话框中,我有一个容器(列表框和一些过滤器控件),我想把它做成一个可重用的控件,这样我就可以将它包含在其他对话框中。为此,我从对话框的视图和视图模型中提取了相关代码,并创建了一个新的视图和视图模型。这一切看起来都很好 问题是,现在回到对话框中,我有一个dockpanel,其中有一个很大的空白区域,我需

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

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

问题是,现在回到对话框中,我有一个dockpanel,其中有一个很大的空白区域,我需要可重用的控件

从对话框viewmodel OnInitalize()中,我可以创建可重用控件viewmodel,但我不知道如何将其视图放入对话框视图的dockpanel中

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


还是我的做法不对?

如果对话框视图模型上有另一个视图模型类型的属性,并且向对话框视图中添加了一个名为与此属性相同的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>
//对话框视图模型
私有MyReuseAbleControlViewModel myReuseableControl;
公共MyReuseAbleControlViewModel MyReuseableControl
{ 
获取{返回this.myReuseableControl;}
设置{this.myReuseableControl=value;NotifyOfPropertyChanged(…);}
}
//对话框视图模型构造函数
公共对话框ViewModel()
{
this.MyReuseableControl=新的myReuseAbleControlViewModel();
}
//对话框视图
...

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

这听起来正是我要寻找的,我将尝试一下。花了几个小时试图解决这个问题,然后我找到了这个答案。非常感谢,解决方案比我想象的要简单得多。嗯,这是可行的,但我正在尝试绑定列表的
SelectedItem
属性,该属性是我在VM的ctor中设置的,它会抛出一个异常,说它必须设置为有效值。如果我删除该绑定,它会工作,甚至在设计器中,它也会正确设置所选项目。啊。