これらのメソッドを公開するクライアントを介してWCFサービスメソッドを呼び出すWPFアプリケーションがあります。アプリケーションをサービスのプロパティにバインドし、このプロパティが変更されたときに通知を受け取る方法はありますか? INotifyPropertyChanged は知っていますが、この場合の効率については疑問があります...ありがとう
編集:実際、私が望むのは、サーバー側で発生した変更をアプリケーションに通知することだけです。
これらのメソッドを公開するクライアントを介してWCFサービスメソッドを呼び出すWPFアプリケーションがあります。アプリケーションをサービスのプロパティにバインドし、このプロパティが変更されたときに通知を受け取る方法はありますか? INotifyPropertyChanged は知っていますが、この場合の効率については疑問があります...ありがとう
編集:実際、私が望むのは、サーバー側で発生した変更をアプリケーションに通知することだけです。
ここでいくつか質問があります。コードを WCF サービスのクライアント エンドにバインドし、部分的なクラス定義を使用して INotifyPropertyChanged インターフェイスを追加して、設計に適合させることができます。しかし、サーバーから更新をプッシュするためのメカニズムを実際に配線するのは、はるかに困難です。
実際、イベントは WCF で機能し、適度なパフォーマンスを発揮します。つまり、ポーリングに関連する遅延はありません。ただし、WCF コードを INotifyPropertyChanged パターンに合わせようとはしません。代わりに、クライアント/サーバー コミュニケーション用により特注のインターフェイスを使用し、ViewModel で INotifyPropertyChanged を公開します。
サービスにデリゲートを追加し、ビュー モデルまたはコード ビハインドからサービスを呼び出して、INotifyPropertyChanged
インターフェイスを実装するプロパティに変更を反映するだけです。
サービス中:
public delegate void ServcieUpdate(SomeDataType data);
public ServcieUpdate OnServcieUpdated { get; set; }
データが更新される場合:
if (OnServcieUpdated != null) OnServcieUpdated(data);
ビュー モデル:
private ServiceClient serviceClient = new ServiceClient();
private ObservableCollection<SomeDataType> data = new
ObservableCollection<SomeDataType>();
public YourViewModel()
{
serviceClient.OnServiceUpdated += OnServcieUpdated;
}
public ObservableCollection<SomeDataType> Data
{
get { return data; }
set { data = value; NotifyPropertyChanged("Data");
}
public void OnServcieUpdated(SomeDataType data)
{
Data = data;
}
オブジェクトの使用に慣れていない場合は、MSDNのデリゲート (C# プログラミング ガイド)ページを参照してください。delegate