Я использую async / await для загрузки данных для UserControl. UserControl получает данные через главное окно. Ниже мой файл MainWindow.xaml.cs:
public partial class MainWindow : Window
{
private MainViewModel _viewModel;
public MainWindow(MainViewModel viewModel)
{
InitializeComponent();
_viewModel = viewModel;
Loaded += MainWindow_Loaded;
DataContext = _viewModel;
}
private async void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
await _viewModel.LoadAsync();
}
}
Я инициализирую главное окно в App.xaml.cs, как показано ниже:
var bootstraper = new Bootstrapper();
var container = bootstraper.Bootstrap();
var mainWindow = container.Resolve<MainWindow>();
mainWindow.Show();
Я использую Autofac, и мой класс Bootstrapper выглядит следующим образом:
public class Bootstrapper
{
public IContainer Bootstrap()
{
var builder = new ContainerBuilder();
builder.RegisterType<MainWindow>().AsSelf();
builder.RegisterType<MainViewModel>().AsSelf();
builder.RegisterType<NavigationViewModel>().As<INavigationViewModel>();
builder.RegisterType<LookupDataService>().AsImplementedInterfaces();
builder.RegisterType<FriendDataService>().As<IFriendDataService>();
builder.RegisterType<FriendOrganizerDbContext>().AsSelf();
return builder.Build();
}
}
Привязка к UserControl в MainWindow.xaml:
<view:NavigationView DataContext="{Binding NavigationViewModel}" />
NavigationViewModel:
<Grid>
<ListView ItemsSource="{Binding Friends}"
DisplayMemberPath="DisplayMember">
</ListView>
</Grid>
Когда я ставлю точки останова в коде, я могу извлечь данные из базы данных и увидеть, что свойство, которое я связываю, заполняется необходимыми данными, но я ничего не вижу в пользовательском интерфейсе.
Я понимаю, что DataContext = _viewModel;
выполняется еще до того, как _viewModel заполняется необходимой информацией. Но я хотел бы знать, как преодолеть эту проблему. Как правильно установить для DataContext что-то, что возвращается вызовом async / await.
О, я слежу за созданием корпоративного приложения с использованием WPF, MVVM и кода Entity Framework сначала из Pluralsight.
Заранее спасибо.