1

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

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

4

2 回答 2

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;
}

如果您不熟悉使用对象,请查看 MSDN上的Delegates (C# Programming Guide)页面。delegate

于 2013-10-21T10:06:59.383 回答
0

这里有几个问题。您可以将代码绑定到 WCF 服务的客户端,并且通过使用部分类定义,您可以向其添加 INotifyPropertyChanged 接口,使其符合您的设计。但实际上连接从服务器推送更新的机制要困难得多。

事实上,事件将在 WCF 上运行,并且性能合理,即您不会有与轮询相关的延迟。但是,我不会尝试将您的 WCF 代码压缩到适合 INotifyPropertyChanged 模式。而是为客户端/服务器通信使用更定制的接口,然后在 ViewModel 中公开 INotifyPropertyChanged。

于 2013-10-21T09:58:43.427 回答