我需要在设计时间设置我的sharedViewModel,以在我的ui
中显示数据当我运行该应用程序时,我在屏幕上看到数据,因为onloaded runsloadStuffs
loadStuffs启动共享视图模型并创建数据
但是在重建后的设计时间,设计师没有出现
<Window x:Class="MyApp.MainWindow"
mc:Ignorable="d"
xmlns:local="clr-namespace:MyApp"
...
Loaded="OnLoaded"
d:DataContext="{Binding RelativeSource={RelativeSource Self}, Path=SharedViewModel}"
>
void OnLoaded(object sender, RoutedEventArgs e)
{
LoadStuffs();
}
private void LoadStuffs()
{
Logger.Log("LoadStuffs() executed!");
...
SharedViewModel = ...
}
消息“执行loadStuffs()已执行!”仅在运行时出现,从不
主要类的属性:
private SharedViewModel m_sharedViewModel;
public SharedViewModel SharedViewModel
{
set
{
m_sharedViewModel= value;
}
get
{
Logger.Log("SharedViewModel getter"); <<<<< this is never called as the log.txt is only created at runtime
if (m_sharedViewModel == null)
{
Logger.Log("Initializing DesignSharedViewModel");
LoadStuffs(); // Initializes m_sharedViewModel
}
return m_sharedViewModel;
}
}
感谢您在此方面的帮助
在设计时间和运行时都使用ViewModel
1-添加一个类以处理ViewModels的创建。
ViewModelLocator
2-在app.xaml中创建此定位器类的实例,使其成为一个应用程序宽resouce.
public class ViewModelLocator
{
public ViewModelLocator()
{
// include any IOC setup here if required.
}
public MainViewModel MainViewModel
{
get
{
return new MainViewModel();
// replace this with a call to the IOC container if any injected servies are required.
}
}
// repeat for any other ViewModel types required.
}
3-在每个视图中,将此定位器实例作为其<Application.Resources>
<local:ViewModelLocator x:Key="ViewModelLocator">
</Application.Resources>
DataContext
对于一个更详细的示例,包括如何为设计时间和运行时间使用不同注射服务,请查看我的
BLOGPOST.
。