Mvvm 使用AvalonDock将实例化的ViewModel注入视图

Mvvm 使用AvalonDock将实例化的ViewModel注入视图,mvvm,dependency-injection,unity-container,avalondock,constructor-injection,Mvvm,Dependency Injection,Unity Container,Avalondock,Constructor Injection,我有一个可视的ViewModels集合,绑定到AvalonDock的LayoutItemTempate。当用户从获取的列表中打开问题时,它会在可观察集合中创建一个新的ViewModel。因此将创建一个新文档,但它是新文档,并且不使用集合中的ViewModel 我试图使用转换器,但它似乎根本没有使用转换器。有人知道另一种选择吗?甚至可能是一个代码隐藏的解决方案 下面是主要的XAML代码片段 <Window.Resources> <pconv:IProblemInfoTo

我有一个可视的ViewModels集合,绑定到AvalonDock的LayoutItemTempate。当用户从获取的列表中打开问题时,它会在可观察集合中创建一个新的ViewModel。因此将创建一个新文档,但它是新文档,并且不使用集合中的ViewModel

我试图使用转换器,但它似乎根本没有使用转换器。有人知道另一种选择吗?甚至可能是一个代码隐藏的解决方案

下面是主要的XAML代码片段

 <Window.Resources>
    <pconv:IProblemInfoToFreeResponseVMConverter x:Key="FreeResponseToVM" />
</Window.Resources>
. . . { some lines down } . .  .
<dock:DockingManager.LayoutItemTemplateSelector>
    <selector:LayoutItem>
        <selector:LayoutItem.ProblemEditViewTemplate>
            <DataTemplate>
                <problem:FreeResponseEdit 
                    DataContext="{Binding SelectedProblem,
                        Converter={StaticResource FreeResponseToVM}}" />
            </DataTemplate>
        </selector:LayoutItem.ProblemEditViewTemplate>
    </selector:LayoutItem>
</dock:DockingManager.LayoutItemTemplateSelector>

ItemSource
绑定到FreeResponseEditViewModel的堆栈中,DataTemplate会创建
FreeResponseEditit
,然后将
FreeResponseEditViewModel作为DataContext自动注入视图中

<dock:DockingManager.LayoutItemTemplateSelector>
    <selector:LayoutItem>
        <selector:LayoutItem.ProblemEditViewTemplate>
            <DataTemplate>
                <problem:FreeResponseEdit /> 
            </DataTemplate>
        </selector:LayoutItem.ProblemEditViewTemplate>
    </selector:LayoutItem>
</dock:DockingManager.LayoutItemTemplateSelector>


DataContext
被完全省略。

Hmm,
DataContext
属性被注入了吗?或我目前正在使用与您类似的“设置”使用AvalonDock 2.0,但在我的情况下,
DataContext
在创建视图后没有设置(使用视图中加载的
事件的订阅进行检查)。如果您能详细说明一下如何注入
DataContext
,那就好了。谢谢。不管怎样,它确实是“属性注入的”-在
加载的
事件中检查
DataContext
属性时,我可能有点累了:D谢谢你的回答+1.
<dock:DockingManager.LayoutItemTemplateSelector>
    <selector:LayoutItem>
        <selector:LayoutItem.ProblemEditViewTemplate>
            <DataTemplate>
                <problem:FreeResponseEdit /> 
            </DataTemplate>
        </selector:LayoutItem.ProblemEditViewTemplate>
    </selector:LayoutItem>
</dock:DockingManager.LayoutItemTemplateSelector>