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