更新下面
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打开一个窗口,但是,如果可能的话,我仍然希望对此进行澄清.