Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 通知在WCF服务中更改的属性_Wpf_Wcf_Inotifypropertychanged - Fatal编程技术网

Wpf 通知在WCF服务中更改的属性

Wpf 通知在WCF服务中更改的属性,wpf,wcf,inotifypropertychanged,Wpf,Wcf,Inotifypropertychanged,我有一个WPF应用程序,它通过公开这些方法的客户端调用WCF服务方法。有没有办法将我的应用程序绑定到服务的属性,并在该属性发生更改时得到通知?我知道InotifyProperty已更改,但我对其在这种情况下的效率有一些怀疑。。。谢谢 编辑:实际上,我只想让我的应用程序知道服务器端发生的更改。这里有几个问题。您可以将代码绑定到WCF服务的客户端,通过使用分部类定义,您可以向其添加INotifyPropertyChanged接口,使其符合您的设计。但实际上连接从服务器推送更新的机制要困难得多 事实上

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


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

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


事实上,事件将在WCF上工作,并具有合理的性能,即不会出现与轮询相关的延迟。但是,我不会试图压缩您的WCF代码来适应INotifyPropertyChanged模式。相反,为客户机/服务器通信使用更定制的接口,然后在ViewModel中公开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;
}
private-ServiceClient-ServiceClient=new-ServiceClient();
私有ObservableCollection数据=新建
可观察收集();
公共视图模型()
{
serviceClient.OnServiceUpdated+=OnServiceUpdated;
}
公共可观测收集数据
{
获取{返回数据;}
set{data=value;NotifyPropertyChanged(“数据”);
}
已更新服务上的公共void(SomeDataType数据)
{
数据=数据;
}

请查看MSDN上的页面,因为您不熟悉使用
委托
对象。

请更详细地描述您的疑问。另外:是否希望收到服务器更改的通知?好的,我编辑了该问题。这并不能解决当服务器端发生更改时更新的问题。您可能需要采取另一种方式看……这正是它所解决的问题(通过使用
ServcieUpdate
委托
)。如何通过WCF封送此回调?如何将数据从服务器推送到客户端?没问题,始终很难跟踪移动的目标。尤其是当您不知道它们正在移动时:)