我的WPF应用程序中存在以下问题。我在主窗口中有一个专用区域,我想根据用户的输入显示各种用户控件。我拥有的其中一个UC将允许用户在存储库中搜索一些记录。客户的要求是UC应该在第一次显示时包含所有记录,并且仅根据搜索条件过滤数据以用于后续搜索。我正在使用MVVM模式,我有我的观点,我的模型(在单独的业务层项目中定义)和我的视图模型。 我在我的UC视图模型中注入了存储库服务,因此我可以在用户执行搜索时随时获取数据。
我将视图的DataContext设置为我创建的视图模型的实例。以下是我的MainWindowviewModel类的Initialize方法的摘录:
_myUserControlView = new MyUserControlView();
var userControlViewModel = new MyUserControlViewModel(_repositoryService);
_myUserControlView.DataContext = userControlViewModel;
用户控件视图包含一个网格,该网格应显示由repo服务提取的记录。当构建我的UC视图的视图模型时,我可以看到repo服务正在获取正确的数据。但网格中没有显示任何内容。 XAML包含网格的正确ItemSource绑定:
<DataGrid Name="MyUcDataGrid" AutoGenerateColumns="True" Height="Auto" Width="Auto" ItemsSource="{Binding MyRepoFetchedList}">
但是,如果我在Initialize方法中显式设置ItemsSource,则会正确显示数据:
_myUserControlView = new MyUserControlView();
var userControlViewModel = new MyUserControlViewModel(_repositoryService);
_myUserControlView.DataContext = userControlViewModel;
_myUserControlView.MyUcDataGrid.ItemsSource = userControlViewModel.MyRepoFetchedList;
我正在学习关于PluralSight的一些课程,但没有一个人有这个明确的任务。对于所有这些工作示例,XAML中的绑定就足够了。 我错过了什么?我的模型是在BL库中定义的,但我不认为是这种情况。 PluralSight上的示例比我的解决方案更简单,它将在同一个WPF项目中拥有模型。另一件事是我在PluralSight上看到的例子将异步获取记录。我的代码仍然处于早期开发阶段,但却没有。我会改变这一点,但我认为不是这样。任何人都有任何线索,为什么DataGrid不会显示我的记录,除非我再次将ItemsSource绑定到代码中的正确列表?
TIA, 埃迪