我有一个名为MainViewModel的ViewModel(当然),其中包含多个构造函数,如下所示:
[ImportingConstructor]
public MainViewModel(IWindowManager windowManager)
: this(windowManager, new DataProvider(), new LocalJsonPersistenceManager())
{
}
[PreferredConstructorAttribute]
public MainViewModel(IWindowManager windowManager, IInformationProvider infoProvider,
IPersistenceManager persistenceManager)
{
//generating data, handling clicks etc.
}
在那个 ViewModel 中,有一个公共的项目,它会不断地更新(每当用户点击某个按钮并在表单上执行一些操作时):
public Item ClickedItem
{
get { return clickedItem; }
set
{
clickedItem = value;
NotifyOfPropertyChange(() => ClickedItem);
if (ClickedItem != null)
{
FindNextItem();
}
}
}
现在我正在构建一个包含ListView的UserControl,我个性化了它使其成为一个具有粘性标题的ListView(每当到达下一个标题时,标题会向上移动),因为我只能通过GroupStyled ListView实现这一点,所以我必须在C#代码后台构建ListView的数据。
编辑: 我正在尝试使用ViewModelLocator,如下:
public class ViewModelLocator
{
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
if (ViewModelBase.IsInDesignModeStatic)
{
// Create design time view services and models
//SimpleIoc.Default.Register<IDataService, DesignDataService>();
}
else
{
// Create run time view services and models
//SimpleIoc.Default.Register<IDataService, DataService>();
}
SimpleIoc.Default.Register<MainViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
public static void Cleanup()
{
// TODO Clear the ViewModels
}
}
我正在这样调用数据的具体值:
var vm1 = (new ViewModelLocator()).Main;
testtxt.Text = vm1.ClickedItem.Name;
但是它在运行时一直给我一个错误信息,指向以下代码行:
return ServiceLocator.Current.GetInstance<MainViewModel>();
在 ViewModelLocator 的代码块中:
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
出现错误信息{"Type not found in cache: Caliburn.Micro.IWindowManager."},一个InnerException消息为null。