使用MVVM Light ViewModelLocator在视图模型中重置和加载数据

Pau*_*wat 5 c# wpf mvvm-light

更新下面

WPF派对的新手,如果之前有人问过,请道歉.

我想做一个弹出窗口来创建一个实体和另一个(或者如果推荐的话)进行编辑/更新,但是不能轻易获得一个空的ViewModel或加载数据进行编辑.

ViewModelLocator

public ViewModelLocator()
{
    ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
    SimpleIoc.Default.Register<MainViewModel>();
    SimpleIoc.Default.Register<CreateViewModel>();
    SimpleIoc.Default.Register<EditViewModel>();
}

public MainViewModel Main
{
    get
    {
        return ServiceLocator.Current.GetInstance<MainViewModel>();
    }
}

public CreateViewModel Create
{
    get
    {
        return ServiceLocator.Current.GetInstance<CreateViewModel>(Guid.NewGuid().ToString());
    }
}

public EditViewModel Edit
{
    get
    {
        return ServiceLocator.Current.GetInstance<EditViewModel>(Guid.NewGuid().ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

Main.xaml(使用相同的方法进行创建和编辑)

<Window
//Hide namespaces, etc.
DataContext="{Binding Main, Source={StaticResource Locator}}">
Run Code Online (Sandbox Code Playgroud)

在MainViewModel中,我有一个命令可以为create打开一个新窗口

Create create = new Create();
create.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

如果我在文本框中键入数据并使用下面的方法关闭,那么当我重新打开数据时,我会使用Guid.NewGuid()viewmodellocator中的数据来阻止它成为单例,但是,没有快乐.

CreateViewModel public CreateViewModel(){CloseWindowCommand = new RelayCommand(this.CloseWindow); }

private void CloseWindow(DXRibbonWindow window)
{
    if (window != null)
    {
        window.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想如果我可以清除创建窗口,我可以使用以下代码在编辑窗口中加载数据.

var editVM = (new ViewModelLocator()).Edit;
editVM.LoadData(id);
Run Code Online (Sandbox Code Playgroud)

或使用信使.

TLDR 如何在打开View窗口时使用MVVMLight ViewModelLocator加载具有全新ViewModel的View.

更新 我没有Guid.NewGuid().ToString())正确的viewmodel属性,所以现在我可以用一个新的viewmodel打开一个窗口,但是,如果可能的话,我仍然希望对此进行澄清.