【发布时间】:2011-02-02 15:43:33
【问题描述】:
我想在 AddNew 模式下打开一个 WPF4/EF4 表单,以便用户可以在从数据库中选择任何数据之前开始在绑定控件中输入数据。我已经有一个“添加新记录”按钮,但它只适用于填充的 DataContext(我的 CollectionViewSource)。到目前为止的代码如下:
private void btnAddNewRecord_Click(object sender, RoutedEventArgs e)
{
LabSample newEntity = _labEntitiesContext.LabSamples.CreateObject<LabSample>();
_labEntitiesContext.LabSamples.AddObject(newEntity);
_labSamplesListCollectionView.AddNewItem(newEntity);
}
背景:这是一个带有绑定控件的基本 WPF 应用程序。我从出现在我的数据源窗口中的实体框架模型开始。我从 DataSources 窗口中拖动了我的 LabSample 实体,让它在 XAML 的 Windows.Resources 部分中创建我的 CollectionViewSource (labSamplesViewSource)。我所有控件的 DataContext 都是 labSamplesViewSource。在实例化窗口时,我创建了一个名为 _labEntitiesContext 的新 LabEntities 对象。我使用 _labEntitiesContext 来构建过滤后的 ObjectQuery(of LabSample) 和 SaveChanges,但是对于这个 _labEntitiesContext 是如何连接到我的 CollectionViewSource 的,我有点困惑。如果您能在回答我的问题的同时澄清这一点,那将很有帮助。 注意:我还没准备好使用 MVVM。
当窗口加载时,我使用 this.FindResource 在名为 _labSamplesCollectionViewSource 的类级变量中获取对 CollectionViewSource 的引用。我允许用户输入搜索字段以用数据填充屏幕。我的 LoadData 例程如下所示:
System.Data.Objects.ObjectQuery<LabSample> labSamplesObjectQuery = this.GetLabSamplesFiltered_Query(_labEntitiesContext, sampleID_LIKE, xxx_LIKE, yyy_LIKE);
System.Data.Objects.ObjectResult<LabSample> labSamplesObjectResult = labSamplesObjectQuery.Execute(System.Data.Objects.MergeOption.AppendOnly);
_labSamplesCollectionViewSource.Source = new System.Collections.ObjectModel.ObservableCollection<LabSample>(labSamplesObjectResult);
_labSamplesListCollectionView = (ListCollectionView)_labSamplesCollectionViewSource.View;
上面设置的 _labSamplesListCollectionView 类级别变量在我的 btnAddNewRecord_Click 代码中使用。 在调用 LoadData 之前,_labSamplesListCollectionView 为 null,导致我的 AddNew 代码失败,并显示“对象引用未设置为对象的实例”。
我怎样才能做到这一点?我想知道我是否应该使用 _labSamplesListCollectionView.AddNew 而不是我目前的技术,但我也无法完成这项工作。非常感谢您的帮助。
【问题讨论】:
标签: wpf entity-framework entity-framework-4 binding