MVVM 内の ObservableCollection の概念を理解するのに苦労しています。まず、WPF や Silverlight ではなく、Windows 8/Metro アプリでこれを行っていることを指摘したいと思います。
マイクロソフトのドキュメントによると、このコレクションには次のような有用性があります。「項目が追加、削除、またはリスト全体が更新されたときに通知を提供する動的データ コレクションを表します。」私が理解していることから、バインディングが関係している場合、これは非常に役立ちます。ネット上で、実行時に ObservableCollection を作成してから作業することで、多くの簡単な例を見つけましたが、このコレクションをリポジトリで使用する適切な方法がわかりませんでした。
ORM データベース バックエンドの実装、または生の ADO.NET 実装である次のリポジトリ インターフェイスがあるとします。
public interface IRepository<T>
{
ObservableCollection<T> GetAll();
void Create();
void Update();
void Delete();
T GetByKey(object key);
}
およびリポジトリをモデルとして使用する単純な ViewModel
public class ViewModel
{
private ObservableCollection<Dummy> _obsListDummy;
private RelayCommand _addCommand,_deleteCommand,_updateCommand;
private IRepository<Dummy> _repositoryDummy;
public class ViewModel()
{
_repositoryDummy=Factory.GetRepository<Dummy>();
}
public ObservableCollection<Dummy> ObsListDummy
{
get
{
return _repositoryDummy.GetAll();
}
}
public RelayCommand AddCommand
{
get
{
if (_addCommand == null)
{
_addCommand = new RelayCommand(p => DoAdd();
//DoAdd method shows a popup for input dummy and then closes;
);
}
return _myCommand;
}
}
........
}
私のビューは、グリッドを使用した単純な XAML であり、ダミー オブジェクトには INotifyPropertyChanged が実装されています。
現在、追加、更新、または削除した後のこの実装では、ObservableCollection は更新されません。代わりに IEnumerable を配置することもできましたが、リポジトリにある ObservableCollection と同期する方法の洗練された解決策は見当たりません。 CollectionChanged にサブスクライブする以外に、すべての状態を処理しますが、リポジトリで行うロジックと一緒に自分自身を繰り返すようです。さらに悪いことに、リポジトリから ObservableCollection へのプッシュ通知を受け取りたいとしましょう。
私の問題について理解できたことを願っています。
前もって感謝します。