あなたがOnDeserialized属性を使用することができます。
背景
- クライアントは、WCFサービスを介して、サーバーからデータを取得します。
- WCFサービス参照はVisual Studioによって "参照されたアセンブリ内の再利用タイプ"によって生成されるため、WCFプロキシ操作は実行できません。
- クライアント側アプリケーションのプロパティは、オブジェクトのいずれかの任意のプロパティは、変更されたWCFから受信した場合(これらのオブジェクトはINotifyPropertyChangedのを実装する)
事前警告
私は理解変更する必要がありますこれはいくつかのオブジェクト指向と責任のルールを破りますが、ソリューションはとても短く、簡単で、私の現在および将来のニーズに適合しています。このソリューションは、各クライアント側のデシリアライズ時に発生する必要がある重要なロジックがある場合、あまり実用的ではありません。
[DataContract]
public class DataTransferObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
[OnDeserialized]
public void OnDeserialized(StreamingContext context)
{
dynamic app = Application.Current;
if(app != null) //Prevents execution on server-side. This code is meant to only execute at the client
{
PropertyChanged += (sender, args) =>
{
app.IsAnythingDirty = true;
};
}
}
}
キー
- この作品の理由は、動的なキーワードです。 動的キーワードを使用する必要があります。DTOを含むプロジェクトは循環参照のために UIプロジェクトを参照できないためです。 UIプロジェクトを参照できない場合、コンパイラはIsAnythingDirtyブール値を認識しません。
- Application.Currentがnullであるかどうかを確認すると、コードはサーバー側ではなくクライアント側でのみ実行されます。
質問が分かりません。誰かがこれをやったところでコードサンプルを探していますか?あなたの意図がより具体的になりますか? –
私は可能な限り一般的な質問をしたいと思った。私は、WCFワークフロー(どこかの属性?動作?)にフックできる場所についてのガイダンスを探しています。具体的には、システムに入る各オブジェクトのINotifyPropertyChanged.PropertyChangedイベントを購読したいので、ユーザーによって変更されました。 –
私は参照してください。マイクの答えを見てください...それはあなたが探しているものかもしれません。 –