gpt4 book ai didi

c# - 使用异步等待在 MinWindow 上设置 DataContext

转载 作者:行者123 更新时间:2023-12-03 10:32:30 26 4
gpt4 key购买 nike

我正在使用 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 中绑定(bind)到 UserControl:
<view:NavigationView DataContext="{Binding NavigationViewModel}" />
导航 View 模型:
<Grid>
<ListView ItemsSource="{Binding Friends}"
DisplayMemberPath="DisplayMember">

</ListView>
</Grid>

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

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

哦,我正在关注 Pluralsight 的使用 WPF、MVVM 和 Entity Framework Code First 构建企业应用程序。

提前致谢。

最佳答案

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

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

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

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

关于c# - 使用异步等待在 MinWindow 上设置 DataContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52354745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com