我有一个 WPF 应用程序,它通过公开这些方法的客户端调用 WCF 服务方法。有什么方法可以将我的应用程序绑定到服务的属性,并在该属性更改时得到通知?我知道 INotifyPropertyChanged 但我对它在这种情况下的效率有些怀疑......谢谢
编辑:实际上,我想要的只是通知我的应用程序服务器端发生的更改。
我有一个 WPF 应用程序,它通过公开这些方法的客户端调用 WCF 服务方法。有什么方法可以将我的应用程序绑定到服务的属性,并在该属性更改时得到通知?我知道 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上的Delegates (C# Programming Guide)页面。delegate
这里有几个问题。您可以将代码绑定到 WCF 服务的客户端,并且通过使用部分类定义,您可以向其添加 INotifyPropertyChanged 接口,使其符合您的设计。但实际上连接从服务器推送更新的机制要困难得多。
事实上,事件将在 WCF 上运行,并且性能合理,即您不会有与轮询相关的延迟。但是,我不会尝试将您的 WCF 代码压缩到适合 INotifyPropertyChanged 模式。而是为客户端/服务器通信使用更定制的接口,然后在 ViewModel 中公开 INotifyPropertyChanged。