UPDATE Below

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());
    }
}

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

<Window
//Hide namespaces, etc.
DataContext="{Binding Main, Source={StaticResource Locator}}">

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

Create create = new Create();
create.ShowDialog();

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

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

private void CloseWindow(DXRibbonWindow window)
{
    if (window != null)
    {
        window.Close();
    }
}

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

var editVM = (new ViewModelLocator()).Edit;
editVM.LoadData(id);

或使用信使 .

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

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