MyContext
の自動生成DataContext
クラスのタイプのスーパークラスに対して、MyEntityBase
というカスタムベースタイプがあります。モックデータコンテキストを作成しようとすると、私はMyEntityBase
にINotifyPropertyChanged
を実装することにしました。変更を一般的に追跡できます。ここでカスタムDataContextベースタイプでINotifyPropertyChangedが発生しません
は、私のクラスは次のようになります。このクラスに基づいて
public abstract class MyEntityBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
}
、私は、エンティティの特定の型のインスタンスを格納するための一般的なRepository<T>
クラスを作成しました。このクラスの背後にある基本的な考え方は、datacontextに似たメソッドを提供することですが、代わりにメモリ内のリストを使用します。変更セットはサードパーティシステムとの同期のためのアプリケーションのビジネスロジックにとって重要なものであるため、変更の追跡をシミュレートしたいと考えています。ここで
Repository<T>
の基本的なシェル実装されています。今、私はいくつかのデータを取り込み、タイプEmployee
の簡単なリポジトリを作成し、データのプロパティを変更しようと
public class Repository<T>
where T : MyEntityBase, INotifyPropertyChanged
{
protected List<T> _data;
public Repository(List<T> data)
{
this._data = data;
foreach (var entity in this._data)
{
entity.PropertyChanged += new PropertyChangedEventHandler(entity_PropertyChanged);
}
}
protected void entity_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
Console.WriteLine("HERE");
}
}
。 Employee
オブジェクトには、自動生成されたDataContext
のプロパティ変更通知ビルトインが含まれているため、PropertyChanged
イベントが発生することが予想されます。
var data = new List<Employee> {
new Employee { FirstName = "Bob" },
new Employee { FirstName = "Joe" },
};
var repo = new Repository<Employee>(data);
// This should fire the PropertyChanged event
data[0].FirstName = "John";
私が間違っているの何を:私は次のコードを実行するときしかし、私はどこにも出力で生成されたHERE
が表示されませんか?
更新:私は次のようにイベントをサブスクライブラインを変更した場合:
(entity as Employee).PropertyChanged += ...
はその後、それが正常に動作します。しかし、T
はすでにEmployee
であると知られており、entity
はEmployee
のインスタンスなので、どういう違いがありますか? MyEntityBase
のevent
をvirtual
に設定しても、正しく動作しません。
ここでコードをhttp://dotnetpad.net/ViewPaste/HfGdC7ypCEC4TYZ-Vb7I0Aにコピーしました(そして、Entityに仮想を追加しました)。それはうまくいくようです...おそらく、従業員に何かがありますか? – Patrick
'Employee'は' SQLMetal'を使って自動生成されるので、私は 'Employee'を制御できません。しかし、違いは 'override'キーワードの不足であるように見えますが、それを削除するとテストコードで再び失敗することになります。 – mellamokb
これは、 'override'というキーワードが存在しなくても' Employee'のような継承されたクラスに常に 'PropertyChanged'をオーバーライドさせる方法が必要なようです。そんなことも可能ですか? – mellamokb