UC卸载时,WPF MVVM部署ViewModel

时间:2018-10-05 20:08:57

标签: user-controls viewmodel mvvm-light dispose

我开始使用MVVM-Light构建WPF应用程序。我的应用程序有一个顶部菜单栏和一个带有中央面板的左侧菜单栏,其中带有一些用户控件,并带有左侧/顶部菜单选项。一切正常,但是我的视图模型没有清理/处理;当我从左侧或顶部菜单中选择菜单选项时,我的viewmodel stil存在,而当我回到菜单选项时,该视图不会刷新并保持插入值。

以下是我的代码的一个示例:

MainViewModel从顶部/左侧菜单接收消息并显示UserControl

public class MainViewModel : ViewModelBase
{
       Messenger.Default.Register<NotificationMessage<string>>(this, "My_Token", (message) =>
        {MessageUtility wMesageUtility = new MessageUtility();
            switch (message.Notification)
            {
                case "MyMessage":
                    switch (message.Content)
                    {
                        case "Insert":
                            if (!SimpleIoc.Default.IsRegistered<Insert_ViewModel>())
                            {
                                SimpleIoc.Default.Register<Insert_ViewModel>(true);
                            }

                            wInsertVM = SimpleIoc.Default.GetInstance<Insert_ViewModel>();
                            ShowMainView(null);
                            CurrentViewModel = wInsertVM;
                            break;
                        default:
                            break;
                    }
                    break;
                default:
                    break;
            }
        });

我的ViewModel类:

public class Insert_ViewModel : ViewModelBase
{
    public FormInternal_ViewModel()
    {
       ...Some Code with ICommand and private methods
    }
}

我的XAML文件:

<UserControl x:Class="MyApp.UC.Insert"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"              
         xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
         xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Platform"
         mc:Ignorable="d" 
         d:DesignHeight="400" d:DesignWidth="700"             
         >
<DockPanel Name="MainDock" LastChildFill="True" DataContext="{Binding Insert, Source={StaticResource Locator}}" 
           VerticalAlignment="Stretch" 
           Height="Auto">

    <Grid>
   </Grid>
 </DockPanel>
</UserControl>

选择顶部/左侧菜单后,如何处置Insert_ViewModel? 谢谢。

0 个答案:

没有答案