我想我遗漏了一些简单的东西,但我基本上是在做一个多步骤的方法来获取我的数据。让我通过一个更简单的版本来举例说明我正在做的事情。
- 我有一个实现 INotifyPropertyChanged 的可观察集合
Observable Collection 属于“POCO”类,它是一个简单的 POCO 类,由以下两个属性组成:
PersonID int { get; set; } Name string { get; set; }
我有一个实体到 sql 数据模型,它映射一个简单的数据库表,该表包含 POCO 类中的相同元值,让我们说一个简单的例子,它具有三个行值:
PersonID, Name 1, Brett 2, Emily 3, Test
可观察集合在 ModelView 中连接,如下所示:
ObservableCollection<POCO> _Pocos; POCOEntities ee = new POCOEntities(); public ObservableCollection<POCO> POCOs { get { if (_Pocos == null) { List<POCO> mes = this.GetPOCOs(); _Pocos= new ObservableCollection<POCO>(mes); } return _Pocos; } set { _Pocos = value; OnPropertyChanged("POCOs"); } } List<POCO> GetPOCOs() { return ee.vPOCO.Select(p => new POCOView() { PersonId = p.PersonID, Name = p.Name }).ToList(); }
我也有一个像这样连接的当前项目。
POCO _CurrentPOCO; public POCO CurrentPOCO { get { return _CurrentPOCO; } set { _CurrentPOCO = value; OnPropertyChanged("CurrentPOCO"); } }
4 和 5 是 ModelView 的核心,我将它们连接到数据网格的视图,如下所示:
<DataGrid x:Name="datagrid" ItemsSource="{Binding POCOs}" CurrentItem="{Binding CurrentPOCO}" />
这是我没有得到的部分,如何近乎实时地更新数据库的实体模型?集合连接得很好并且正在更新,我如何告诉数据库发生了什么?如果我设置了一个像“CellEditEnding”或“SelectionChanged”这样的事件并尝试从我的实体模型中实现一个更新过程,它会在 ModelView 中爆炸。如果我只坚持它背后的代码可以工作,有点,但似乎没有捕捉到“之后”改变的价值。
即使使用 ICommand 属性并在 MVVM 中实现中继命令。这些方法都行不通。所以我很好奇我是不是想多了,他们的某种类型的界面你可以烤进去,这将为你刷新数据库。我可以处理插入文档,然后使用一种方法来填充或刷新数据网格,但我希望能够更改数据网格视图中的值并直接更新数据库。
摘要:以最简单的方式,我只想在更改 datagridview 和 observablecollection 更改时更新数据库,以便两者相互同步。