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的窗口,但是,如果可能的话,我仍然希望对此进行澄清 .