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