WPFでMVVMパターンを試していて、WCFデータサービスを使用してデータベース(つまり顧客のリスト)からレコードを取得しました。ビューモデルからは、すべての顧客を取得する特定のサービスを呼び出しています。ビューからオブジェクトの変更を行うときに、変更を追跡する方法はありますか? EntityStateのようなもの。ビューモデルからのエンティティの変更の追跡
助けてください!
WPFでMVVMパターンを試していて、WCFデータサービスを使用してデータベース(つまり顧客のリスト)からレコードを取得しました。ビューモデルからは、すべての顧客を取得する特定のサービスを呼び出しています。ビューからオブジェクトの変更を行うときに、変更を追跡する方法はありますか? EntityStateのようなもの。ビューモデルからのエンティティの変更の追跡
助けてください!
ViewModelデータオブジェクトにINotifyPropertyChanged
が継承されている場合は、変更が加えられたことを示すブール値プロパティを設定できます。
エンティティに対して独自の変更追跡動作を実装できます。私は、変更を追跡する必要がある複数のエンティティを持っています。変更トラッキングのコア機能を実装するための共通のベースクラスを使用するようアドバイスします。
エンティティのフレームワークを使用するセルフトラッキングエンティティもオプションです。 STEとpoco(Plain Old Clr Objects)エンティティの使用については、すでに多数の記事があります。ここを参照してください:
は、あなたが顧客のリストである '顧客' という名前のプロパティで、ViewModelにクラスを持っていると言います。 3つの事を変更することができます。
WPFに依存;
あなたの顧客のコレクションは変更できないと言って簡単に回避してください。つまり、ViewModelの構築中に顧客のリストを割り当て、このプロパティを置き換えません。
#2の場合、ObservableCollectionという名前の.NETオブジェクトを再利用することをお勧めします。このコレクションはINotifyPropertyChangedを実装し、追加、削除、クリアなどの呼び出し時に正しい引数で正しい通知を発行します。
#3では、Customerオブジェクトに対してINotifyPropertyChangedを実装する必要があります。たとえば:
public class Customer : INotifyPropertyChanged
{
public PropertyChangedEventHandler PropertyChanged;
private string _name;
public string name {
get { return _name; }
set { _name = value; ... /* add code to fire exception */ }
}
... // more properties
}
は今、あなたのビューモデルでは、UIで監視可能なコレクション
public class ViewModel
{
public ObservableCollection<Customer> customers { get; private set; }
ViewModel() {
// Allocate it once during construction
customers = new Observablecollection<Customer>()
}
}
を持って、あなただけのバインドする必要があります。どんなItemsControlを使用していても:
<ItemsControl DataSource="{Binding customers}">
<!-- The template to display the items here -->
</ItemControl>
これで、顧客コレクションとサーバー上のコレクションを同期させておく必要があります。顧客に行った変更はすべてUIに反映されます。
これは役に立ちます - http://stackoverflow.com/questions/6332802/how-to-track-entity-changes-with-wcf-ria-services – davidsleeps