当创建新的ViewModel实例MVVM时,视图状态保持不变

时间:2014-09-30 10:57:28

标签: c# wpf mvvm mvvm-light

我确定答案已经在那里,但似乎无法找到它。我有一个SubView,我在MainViewModel中动态。然后使用样式将其显示给用户。当我创建SubViewModel的新实例时,如果它与之前的类型相同,则不会重新创建View。这是一个问题,因为所选选项卡保持不变,并且不会重置为第一个选项卡。虽然我可以在ViewModel中保存选定的选项卡索引来重置它,但我觉得它纯粹是View状态,不应该存在于ViewModel中。我认为这是样式没有注意到实例已经改变。无论如何,每次ViewModel更改时强制View都创建一个新实例?

风格:

<DataTemplate DataType="{x:Type vm:SubViewModel}">
    <v:SubView />
</DataTemplate>

MainViewModel:

if (DisplayItemControl != null)
{
    DisplayItemControl.Cleanup();
    DisplayItemControl = null;
}
DisplayItemControl = new SubViewModel();

1 个答案:

答案 0 :(得分:1)

x:Shared="false"添加到 DataTemplate 资源应该允许创建新实例。当DisplayItemControl直接设置为新值而不是先将其设置为null时,这不起作用,所以我注意到了。

<DataTemplate DataType="{x:Type vm:SubViewModel}" x:Shared="false">
    <v:SubView />
</DataTemplate>