Установка DataContext в MinWindow с использованием асинхронного ожидания - PullRequest
0 голосов
/ 16 сентября 2018

Я использую 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.

Заранее спасибо.

1 Ответ

0 голосов
/ 17 сентября 2018

проблема связана с привязкой вашего текста NavigationView к данным.

<view:NavigationView DataContext="{Binding NavigationViewModel}" />

Поскольку ваш NavigationView добавляется в MainWindow, он пытается найти свойство NavigationViewModel в MainViewModel, так как MainViewModel установлен как DataContext для MainWindow.

Вы можете установить DataContext для NavigationView так же, как вы сделали для MainWindow в конструкторе NavigationView, а в конструкторе NavigationViewModel вызовите функцию LoadAsync, чтобы получить конкретные данные, которые необходимо отобразить в NavigationView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...