【发布时间】:2014-09-30 19:30:44
【问题描述】:
我确信这个问题的答案已经存在,只是似乎找不到。我有一个子视图,我动态地在 MainViewModel 中。然后使用样式将其显示给用户。当我创建 SubViewModel 的新实例时,如果 View 与以前的类型相同,则不会重新创建 View。这是一个问题,因为所选选项卡保持不变并且未重置为第一个选项卡。虽然我可以将选定的选项卡索引保存在 ViewModel 中以重置它,但我觉得它纯粹是 View 状态,不应该存在于 ViewModel 中。我认为这是没有注意到实例已更改的样式。每次 ViewModel 更改时,是否强制 View 创建一个新实例?
风格:
<DataTemplate DataType="{x:Type vm:SubViewModel}">
<v:SubView />
</DataTemplate>
主视图模型:
if (DisplayItemControl != null)
{
DisplayItemControl.Cleanup();
DisplayItemControl = null;
}
DisplayItemControl = new SubViewModel();
【问题讨论】:
-
强烈建议您看看 Caliburn Micro,因为它使 ViewModel 的组合变得非常容易。
-
您似乎没有在任何地方设置数据上下文,您的其余代码在哪里?你的绑定在哪里?在 MVVM 中,您的视图模型不知道您的视图,它不应该引用控件名称。
-
DataContext 是使用视图中的内容控件和将 ViewModel 链接到视图的样式设置的。来自MainView的伴随行
<ContentControl Content="{Binding DisplayItemControl}"/>
标签: c# wpf mvvm mvvm-light