在WCF服务中通知属性已更改

时间:2013-10-21 09:42:29

标签: wpf wcf inotifypropertychanged

我有一个WPF应用程序,它通过客户端调用WCF服务方法,公开这些方法。有没有办法将我的应用程序绑定到服务的属性,并在此属性更改时收到通知?我知道INotifyPropertyChanged但我对这种情况下的效率有一些疑问......谢谢

编辑:实际上,我想要的只是我的应用程序被通知服务器端发生的更改。

2 个答案:

答案 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)页面。