1

我正在使用 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();
    }
}

在 MainWindow.xaml 中绑定到 UserControl:

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

导航视图模型:

<Grid>
    <ListView ItemsSource="{Binding Friends}"
              DisplayMemberPath="DisplayMember">

    </ListView>
</Grid>

当我在代码中放置断点时,我能够从 Db 获取数据并看到我正在绑定的属性正在填充所需的数据,但我在 UI 中什么也看不到。

我知道DataContext = _viewModel;甚至在 _viewModel 填充所需信息之前就已执行。但我想知道如何克服这个问题。将 DataContext 设置为 async/await 调用返回的内容的正确方法是什么。

哦,我正在关注 Pluralsight 的使用 WPF、MVVM 和实体框架代码构建企业应用程序。

提前致谢。

4

1 回答 1

1

问题在于您的 NavigationView 数据上下文绑定。

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

由于您的 NavigationView 已添加到 MainWindow 中,因此它试图在 MainViewModel 中找到 NavigationViewModel 属性,因为 MainViewModel 设置为 MainWindow 的 DataContext。

您可以像在 NavigationView 构造函数中为 MainWindow 所做的那样设置 NavigationView 的 DataContext,并在 NavigationViewModel 构造函数中调用 LoadAsync 函数来获取需要在 NavigationView 中显示的特定数据。

于 2018-09-17T05:39:59.453 回答