嵌套用户控件的Datacontext

时间:2012-11-19 09:41:55

标签: c# wpf mvvm ninject caliburn

背景: -

我有一个包含组合框的wpf视图,该组合框由视图模型使用caliburn micro / ninject和mvvm模式填充;此视图还包含一个stackpanel区域。当用户从组合框中选择适当的选项时,我将适当的用户控件插入到堆栈面板中,向用户呈现无缝转换到相关显示。

在stackpanel中显示的每个“嵌套”用户控件都有自己的视图模型,由caliburn micro自动关联。

问题: -

“嵌套”用户控件绑定全部尝试并返回到父视图模型,而不是专门与它们关联的视图模型。

我最初可以通过指定: -

来解决这个问题
<UserControl.DataContext>
    <vm:UserControlSpecificViewModel/>
</UserControl.DataContext>

但这需要视图模型中的无参数构造函数,但我需要能够将参数传递给此视图模型,以便Ninject可以注入诸如EventAggregator之类的对象。

因为我对WPF还不熟悉所以请大家参与,因此任何帮助都会受到赞赏。

感谢。

詹姆斯。

1 个答案:

答案 0 :(得分:0)

解决问题的一种方法是在后面的代码中初始化视图模型并调用相应的构造函数。如果您不喜欢WPF应用程序中的代码,那么我认为您可以将视图模型绑定到IEventAggregator对象。

XAML:

<UserControl1 x:Name="myUserControl">
</UserControl>

代码隐藏:

public MainWindow() // Constructor for window
{
    InitializeContext();
    MyViewModel vm = new MyViewModel(...);
    myUserControl.DataContext = vm;
}