【问题标题】:Notify property changed in WCF service通知 WCF 服务中的属性更改
【发布时间】:2013-10-21 09:42:28
【问题描述】:

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

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

【问题讨论】:

  • 请详细描述您的疑问。另外:您想收到服务器更改的通知吗?
  • 好的,我编辑了问题。

标签: wpf wcf inotifypropertychanged


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    只需向您的服务添加一个委托,然后从您的视图模型或代码中调用该服务,并使用实现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) 页面。

    【讨论】:

    • 这并不能解决服务器端有变化时的更新问题
    • 可能想再看看...正是它解决了什么(通过使用ServcieUpdatedelegate )。
    • 如何通过 WCF 编组此回调?
    • 数据如何从服务器推送到客户端?
    • 没问题,总是很难跟踪移动目标。特别是当你不知道他们在移动时:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多