簡単なものが欠けていると思いますが、基本的には複数のステップでデータを取得しています。例で行っていることのより単純なバージョンを見てみましょう。
- INotifyPropertyChanged を実装する監視可能なコレクションがあります
Observable Collection は、次の 2 つのプロパティを構成する単純な POCO クラスである「POCO」クラスです。
PersonID int { get; set; } Name string { get; set; }
POCO クラスに同じメタ値を含む単純なデータベース テーブルをマップするエンティティから SQL データ モデルへのエンティティがあり、単純な例として、3 つの行の値があるとします。
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」などのイベントを設定し、エンティティ モデルから Update proc を実装しようとすると、ModelView で BOMBS になります。背後にあるコードだけに固執すると、動作しますが、「変更後」の値をキャプチャしていないようです。
ICommand プロパティを使用し、MVVM で実行されるリレー コマンドを実装しても。これらの方法は機能しません。それで、私がそれを考えすぎていて、データベースを更新するだけで焼き込めるある種のインターフェースがあるかどうかに興味がありました。ドキュメントの挿入を処理してから、メソッドを使用してデータグリッドを設定または更新できますが、datagridview の値を変更してデータベースを直接更新できるようにしたいと考えています。
概要: 可能な限り簡単な方法で、datagridview と observablecollection を変更してデータベースを更新し、2 つが互いに同期するようにしたいだけです。